1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
// Testing non-context-free grammar in the syntax language.
delimiter = Delim;
void Delim();
Delim : "[ \n\r\t]+";
void Block();
Block : "{", (Stmt,)* "}";
void Stmt();
Stmt : "a";
Stmt : "b";
Stmt : Block;
// Syntax extension: add a new block where 'c' may appear!
Stmt : ExtraC;
void ExtraC();
ExtraC : "extra c", Block = ExtraCProd;
ExtraC..Stmt : "c";
// We can also use an additional production.
Stmt : ExtraD;
void ExtraD();
ExtraD : "extra d", Block;
ExtraD..Stmt : "d";
|