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 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
|
;
; this grammar recognises floating point
; expressions involving +,-,*,/ and unary -
;
(
(expr (term exprp)
)
(exprp (+ term "ADD" exprp)
(- term "SUBTRACT" exprp)
()
)
(term (fact termp)
)
(termp (* fact "MULTIPLY" termp)
(/ fact "DIVIDE" termp)
()
)
(fact (|(| expr |)|)
(float "PUSH")
(- fact "NEGATE")
)
(float (opt-sign . "CLEAR" "POINT" digits opt-exp)
(opt-sign "CLEAR" digits opt-. opt-exp)
)
(opt-sign ("POSITIVE" +)
("NEGATIVE" -)
()
)
(opt-digits (digits)
()
)
(digits ("ADD-DIGIT" digit more-digits)
("ADD-DIGIT" digit)
)
(more-digits ("ADD-DIGIT" digit more-digits)
()
)
(digit (|0|) (|1|) (|2|) (|3|) (|4|) (|5|) (|6|) (|7|) (|8|) (|9|)
)
(opt-exp ("EXP" exp)
()
)
(exp (eE opt-sign "CLEAR" digits)
)
(eE (e)
(E)
)
(opt-. (. "POINT" opt-digits)
()
)
)
|