A grammar is essentially a grammar declaration followed by a list of rules but has the following general form:
|||/** Optional Javadoc-style comment */|
|||import ... ;|
|||rule1 // parser and lexer rules, possibly intermingled|
The filename containing grammar X must be called Xg4. You can specify options, imports, token specifications, and actions in any order. There can be at most one each of options, imports, and token specifications. All of those elements are optional except for the header ① and at least one rule. Rules take the following basic form:
|||ruleName : alternative1 | ... | alternativeN ;|
Parser rule ...