12.6 A simple example
Here is the code for a simple calculator implemented by an Lalr(1)
grammar:
| | (begin
(read/lalrp
(lalr-grammar
(nl plus mult minus div const lpar rpar)
(lines
(())
((lines expression nl) (display "--> ")
(display expression)
(newline))
((lines nl)))
(expression
((expression plus term) (+ expression term))
((expression minus term) (- expression term))
((term) term))
(term
((term mult factor) (* term factor))
((term div factor) (/ term factor))
((factor) factor))
(factor
((lpar expression rpar) expression)
((const) const)))
(regular-grammar ()
((+ (or #\tab #\space)) (ignore))
(#\newline 'nl)
((+ digit) (cons 'const (string->number (the-string))))
(#\+ 'plus)
(#\- 'minus)
(#\* 'mult)
(#\/ 'div)
(#\( 'lpar)
(#\) 'rpar))
(current-input-port))
(reset-eof (current-input-port)))
|