Permalink
Fetching contributors…
Cannot retrieve contributors at this time
46 lines (40 sloc) 1.56 KB
/**
* Left-factored LL(1) calculator grammar.
*
* ./bin/syntax -g examples/calc.ll1 --table --parse 'id + id * id' -w
*
* Corresponding parsing table:
*
* ┌────┬─────┬─────┬──────┬─────┬─────┬───┐
* │ │ "+" │ "*" │ "id" │ "(" │ ")" │ $ │
* ├────┼─────┼─────┼──────┼─────┼─────┼───┤
* │ E │ │ │ 1 │ 1 │ │ │
* ├────┼─────┼─────┼──────┼─────┼─────┼───┤
* │ E' │ 2 │ │ │ │ 3 │ 3 │
* ├────┼─────┼─────┼──────┼─────┼─────┼───┤
* │ T │ │ │ 4 │ 4 │ │ │
* ├────┼─────┼─────┼──────┼─────┼─────┼───┤
* │ T' │ 6 │ 5 │ │ │ 6 │ 6 │
* ├────┼─────┼─────┼──────┼─────┼─────┼───┤
* │ F │ │ │ 7 │ 8 │ │ │
* └────┴─────┴─────┴──────┴─────┴─────┴───┘
*/
%%
E
: T E'
;
E'
: "+" T E'
| /* epsilon */
;
T
: F T'
;
T'
: "*" F T'
| /* epsilon */
;
F
: "id"
| "(" E ")"
;