; -*- Hen -*- (require-extension lalr) (define expr-parser (lalr-parser (output: expr-parser "expr.grm.scm") ;; --- token definitions ( ID NUM IF THEN ELSE RPAREN ;;LET (left: + - * /) (right: QUESTION COLON) (left: < > = >= <=) (left: uminus) (right: ^ ) (left: LPAREN) ) (expr (NUM) : (exact->inexact $1) (ID) : $1 (ID LPAREN RPAREN) : `(,$1 ()) (ID LPAREN args RPAREN) : `(,$1 (,(reverse $3))) (expr + expr) : `(,$1 + ,$3) (expr - expr) : `(,$1 - ,$3) (expr * expr) : `(,$1 * ,$3) (expr / expr) : `(,$1 / ,$3) (- expr (prec: uminus)) : `(- ,$2) (expr ^ expr) : `(,$1 ^ ,$3) (expr < = expr) : `(,$1 <= ,$4) (expr > = expr) : `(,$1 >= ,$4) (expr <= expr) : `(,$1 <= ,$3) (expr >= expr) : `(,$1 >= ,$3) (expr > expr) : `(,$1 > ,$3) (expr < expr) : `(,$1 < ,$3) (expr QUESTION expr COLON expr) : `(if ,$1 then ,$3 else ,$5) (IF expr THEN expr ELSE expr) : `(if ,$2 then ,$4 else ,$6) (LPAREN expr RPAREN) : $2 ) (args (expr) : (list $1) (args expr) : (cons $2 $1)) ))