diff src/urweb.grm @ 446:86c063fedc4d

Parsing 'let'
author Adam Chlipala <adamc@hcoop.net>
date Sat, 01 Nov 2008 10:47:10 -0400
parents dfc8c991abd0
children f542bc3133dc
line wrap: on
line diff
--- a/src/urweb.grm	Fri Oct 31 09:30:22 2008 -0400
+++ b/src/urweb.grm	Sat Nov 01 10:47:10 2008 -0400
@@ -198,6 +198,7 @@
  | TYPE | NAME
  | ARROW | LARROW | DARROW | STAR | SEMI
  | FN | PLUSPLUS | MINUSMINUS | DOLLAR | TWIDDLE
+ | LET | IN
  | STRUCTURE | SIGNATURE | STRUCT | SIG | END | FUNCTOR | WHERE | EXTERN | SQL
  | INCLUDE | OPEN | CONSTRAINT | CONSTRAINTS | EXPORT | TABLE | SEQUENCE
  | CASE | IF | THEN | ELSE
@@ -272,6 +273,8 @@
  | tag of string * exp
  | tagHead of string * exp
  | bind of string * con option * exp
+ | edecl of edecl
+ | edecls of edecl list
 
  | earg of exp * con -> exp * con
  | eargp of exp * con -> exp * con
@@ -919,6 +922,15 @@
 
        | UNDER                          (EWild, s (UNDERleft, UNDERright))
 
+       | LET edecls IN eexp END         (ELet (edecls, eexp), s (LETleft, ENDright))
+
+edecls :                                ([])
+       | edecl edecls                   (edecl :: edecls)
+
+edecl  : VAL vali                       ((EDVal vali, s (VALleft, valiright)))
+       | VAL REC valis                  ((EDValRec valis, s (VALleft, valisright)))
+       | FUN valis                      ((EDValRec valis, s (FUNleft, valisright)))
+
 enterDml :                              (inDml := true)
 leaveDml :                              (inDml := false)