diff src/urweb.grm @ 303:7204fab29486

Parsing UPDATE
author Adam Chlipala <adamc@hcoop.net>
date Sun, 07 Sep 2008 14:15:16 -0400
parents bc89dfdbc495
children 148ba06f3e67
line wrap: on
line diff
--- a/src/urweb.grm	Sun Sep 07 14:07:10 2008 -0400
+++ b/src/urweb.grm	Sun Sep 07 14:15:16 2008 -0400
@@ -283,6 +283,7 @@
  | texp of exp
  | fields of con list
  | sqlexps of exp list
+ | fsets of (con * exp) list
 
 
 %verbose                                (* print summary of errors *)
@@ -747,6 +748,16 @@
                                                  ();
                                              (EApp (e, (ERecord (ListPair.zip (fields, sqlexps)), loc)), loc)
                                          end)
+       | LPAREN UPDATE texp SET fsets CWHERE sqlexp RPAREN
+                                        (let
+                                             val loc = s (LPARENleft, RPARENright)
+
+                                             val e = (EVar (["Basis"], "update"), loc)
+                                             val e = (EApp (e, (ERecord fsets, loc)), loc)
+                                             val e = (EApp (e, texp), loc)
+                                         in
+                                             (EApp (e, sqlexp), loc)
+                                         end)
 
        | UNDER                          (EWild, s (UNDERleft, UNDERright))
 
@@ -759,6 +770,9 @@
 sqlexps: sqlexp                         ([sqlexp])
        | sqlexp COMMA sqlexps           (sqlexp :: sqlexps)
 
+fsets  : fident EQ sqlexp               ([(fident, sqlexp)])
+       | fident EQ sqlexp COMMA fsets   ((fident, sqlexp) :: fsets)
+
 idents : ident                          ([ident])
        | ident DOT idents               (ident :: idents)