| And = "&" RuleExpression ^ 20

This And syntactic predicate doesn’t lead to text parsing – it just checks if the rule specified in it can be parsed in this location. If the RuleExpression subrule is successfully parsed, the rule in which the predicate is encountered will be parsed as if there were no predicate. If the parsing fails, the entire rule that is being parsed will be rolled back.

This rule will not form AST elements.


syntax IndentedEmbeddedStatement
  | Statement = !"{" EmbeddedStatement; // not a block statment
  | Block     = &"{" Stmt=Block;

Here, the Block rule will be parsed only if there is the ‘{‘ character found in a current parsing position.

See also