parser .glr ":" via /S :nonterminal ==S /expr :nonterminal ==expr /num :nonterminal ==num S [ expr ] { :0 } :rule expr [ num ] { :0 } :rule expr [ expr "+" expr ] { ==s s :2 s :0 add } :rule expr [ expr "-" expr ] { ==s s :2 s :0 sub } :rule expr [ "(" expr ")" ] { ==s s :1 } :rule num [ /0 ] { -- 0 } :rule num [ /1 ] { -- 1 } :rule num [ /2 ] { -- 2 } :rule [ S :automaton ==Sparser ] len 0 gt { "stack garbage" die } rep "generation done" dump 100000 { Sparser .run =*consume [ "(" "(" /2 "+" /1 "-" /1 ")" ")" "+" /1 ] { _ consume -- } each "" _ consume :result ==result }' rep result dump