docs: protected AstNode cmp(boolean required) throws ScanException, ParseException {
  		AstNode v = add(required);
  		if (v == null) {
  			return null;
  		}
  		while (true) {
  			switch (token.getSymbol()) {
  				case LT:
  					consumeToken();
  					v = createAstBinary(v, add(true), AstBinary.LT);
  					break;
  				case LE:
  					consumeToken();
  					v = createAstBinary(v, add(true), AstBinary.LE);
  					break;
  				case GE:
  					consumeToken();
  					v = createAstBinary(v, add(true), AstBinary.GE);
  					break;
  				case GT:
  					consumeToken();
  					v = createAstBinary(v, add(true), AstBinary.GT);
  					break;
  				case EXTENSION:
  					if (getExtensionHandler(token).getExtensionPoint() == ExtensionPoint.CMP) {
  						v = getExtensionHandler(consumeToken()).createAstNode(v, add(true));
  						break;
  					}
  				default:
  					return v;
  			}
  		}
  	}