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
|
;
; this grammar recognises integer
; expressions involving +,-,*,/ and unary -
;
(
(lines (expr "PRINT" \n lines)
(\n lines)
()
)
(expr (term + term "ADD")
(term - term "SUBTRACT")
(term)
)
(term (fact * fact "MULTIPLY" termp)
(fact / fact "DIVIDE" termp)
(fact)
)
(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|)
)
)
|