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
|
;
; this grammar recognises integer
; expressions involving +,-,*,/ and unary -
;
(
(lines (expr "PRINT" \n lines)
(\n lines)
()
)
(expr (term exprp)
)
(exprp (+ term "ADD" exprp)
(- term "SUBTRACT" exprp)
()
)
(term (fact termp)
)
(termp (* fact "MULTIPLY" termp)
(/ fact "DIVIDE" termp)
()
)
(fact (|(| expr |)|)
(int "PUSH")
(- fact "NEGATE")
(+ fact)
)
(int ("CLEAR" digits)
)
(digits ("ADD-DIGIT" digit more-digits)
)
(more-digits ("ADD-DIGIT" digit more-digits)
()
)
(digit (|0|) (|1|) (|2|) (|3|) (|4|) (|5|) (|6|) (|7|) (|8|) (|9|)
)
)
|