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 31 32 33 34 35 36 37 38 39 40 41 42 43
|
optional delimiter = OSep;
required delimiter = RSep;
void OSep();
OSep : "[ \n\r\t]*";
void RSep();
RSep : "[ \n\r\t]+";
// Simple list to test LR parser.
Array<Str> List();
List => Array<Str>() : Item -> push, ListTail(me);
// List => Array<Str>() : ListRec;
void ListTail(Array<Str> x);
ListTail : ;
ListTail => x : ",", Item -> push, ListTail(x);
void ListRec();
ListRec : List;
Str Item();
Item => v : "[A-Z]+" v;
// This is not reachable from 'List' and should therefore be removed.
void Unreachable();
Unreachable : Item - "INCORRECT";
// Repetition statements.
Array<Str> RepList();
RepList => Array<Str>() : "\[", (Item -> push, ",",)* "\]";
RepList => elems : "{", (Item elems, ",", )+ "}";
// Optional statements.
Maybe<Str> Optional();
Optional => x : "=", (Item x)?;
// Captures.
Str Capture();
Capture => x : "\[", (List) x, "\]";
Capture => x : "z", (List) x;
|