@scinorandex/sparse
Version:
Yet another parser generator
11 lines (10 loc) • 750 B
Plain Text
<S>: <PROGRAM>;
<PROGRAM: program>: (<PRODUCTIONS: productions>)? [EOF];
<PRODUCTIONS: productions>: <PRODUCTION: production> (<PRODUCTIONS: rest>)?;
<PRODUCTION: production>: [L_ANGLE] [IDENTIFIER: production_name] ([COLON] [IDENTIFIER: uuid])? [R_ANGLE] [COLON] <TOKENS: tokens> [SEMICOLON];
<TOKENS: tokens>: <TOKEN: token> (<TOKENS: rest>)?;
<TOKEN: token>: <VARIABLE | TERMINAL: token>;
<TOKEN: grouped_token>: [L_PAREN] <TOKENS: tokens> [R_PAREN] [QUESTION_MARK: question_mark];
<VARIABLE: variable>: [L_ANGLE] <INSIDE: inside> ([COLON] [IDENTIFIER: token_name])? [R_ANGLE];
<TERMINAL: terminal>: [L_BRACKET] <INSIDE: inside> ([COLON] [IDENTIFIER: token_name])? [R_BRACKET];
<INSIDE: inside>: [IDENTIFIER: identifier] ([PIPE] <INSIDE: rest>)?;