aboutsummaryrefslogtreecommitdiff
path: root/examples/working-loaded/parser.test
blob: 6cb98b012d780fecc554e57f7c1de2d95aad7752 (plain)
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
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