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
| ?start: sum
|
| ?sum: product
| | sum "+" product -> add
| | sum "-" product -> sub
|
| ?product: exponent
| | product "*" exponent -> mul
| | product "/" exponent -> div
|
| ?exponent: atom
| | atom "**" exponent -> exponent
|
| ?atom: NUMBER -> number
| | "-" atom -> neg
| | NAME -> var
| | "(" sum ")"
| | NAME "(" argv ")" -> function
|
| argv: [sum ("," sum)*] -> argv
|
|
|
| %import common.CNAME -> NAME
| %import common.NUMBER
| %import common.WS_INLINE
|
| %ignore WS_INLINE
|
|