This is the grammar for parsers, without the return values.
Everything inside <...>
is a placeholder for something that is
harder to read.
parser ParserDesc: ignore: "[ \t\n\r]+" token END: "\'" token ATTR: "<<\([^>]+\|>[^>]\)*>>" token ID: '[a-zA-Z_][a-zA-Z_0-9]*' token STR: <python single and double quoted strings> rule Parser: "parser" ID ":" Options Tokens Rules END rule Options: <nothing> | "option" ":" STR Options rule Tokens: <nothing> | "token" ID ":" STR Tokens | "ignore" ":" STR Tokens rule Rules: <nothing> | "rule" ID OptParam ":" Clause Clauses Rules rule Clause: Subs "->" ATTR rule Clauses: <nothing> | "|" Clause Clauses rule OptParam: <nothing> | ATTR rule Subs: <nothing> | STR Subs | ID OptParam Subs
The full grammar is here.