source: project/release/4/nemo/trunk/expr.grm @ 25642

Last change on this file since 25642 was 25642, checked in by Ivan Raikov, 10 years ago

nemo: update to use lalr 2.4.x

File size: 1.5 KB
Line 
1; -*- Hen -*-
2
3(require-extension lalr)
4
5(define expr-parser
6  (lalr-parser
7
8   (output:    expr-parser "expr.grm.scm")
9
10   ;; --- token definitions
11   ( ID NUM LET IF THEN ELSE RPAREN
12       (right: QUESTION COLON)
13       (left: < > =)
14       (left: + -)
15       (left: * /)
16       (left: uminus)
17       (right: ^ )
18       (left: LPAREN)
19       )
20
21
22   (expr     (NUM)                    : (exact->inexact $1)
23             (ID)                     : $1
24             (ID LPAREN RPAREN)       : `(,$1)
25             (ID LPAREN args RPAREN)  : `(,$1 . ,(reverse $3))
26             (expr + expr)            : `(+ ,$1 ,$3)
27             (expr - expr)            : `(- ,$1 ,$3)
28             (expr * expr)            : `(* ,$1 ,$3)
29             (expr / expr)            : `(/ ,$1 ,$3)
30             (- expr (prec: uminus))  : `(- ,$2)
31             (expr ^ expr)            : `(pow ,$1 ,$3)
32             (expr > expr)            : `(> ,$1 ,$3)
33             (expr < expr)            : `(< ,$1 ,$3)
34             (expr < = expr)          : `(<= ,$1 ,$3)
35             (expr > = expr)          : `(>= ,$1 ,$3)
36             (expr QUESTION expr COLON expr) :  `(if ,$1 ,$3 ,$5)
37             (LET LPAREN bnds RPAREN expr)   :  `(let ,(reverse $3) ,$5)
38             (IF  expr THEN expr ELSE expr)  :  `(if ,$2 ,$4 ,$6)
39             (LPAREN expr RPAREN)     : $2
40             )
41
42   (args     (expr)                   : (list $1)
43             (args expr)              : (cons $2 $1))
44
45   (bnds     (binding)                : (list $1)
46             (bnds binding)           : (cons $2 $1))
47
48   (binding  (LPAREN ID expr RPAREN)  : (list $2 $3))
49
50  ))
Note: See TracBrowser for help on using the repository browser.