In What is a ‘semantic predicate’ in ANTLR3? Bart Kiers gives a very well overview about the different semantic predicates in Antlr3.
Too bad the syntax/semantics were seemingly changed in Antlr4, so this does not compile:
end_of_statement
: ';'
| EOF
| {input.LT(1).getType() == RBRACE}? =>
;
RBRACE
: '}'
;
Could someone please tell me how to do the third case of end_of_statement: Accept if the next token is a ‘}’ but do not consume it.
There is now just a single type of semantic predicates, which looks like this:
And the
inputattribute from the abstract classParser(which your generated parser extends from) now has an underscore in front of it.So, in your case, the following ANTLR v3 syntax:
would look like this in ANTLR v4: