Add 'begin..end' alternative to parentheses
[hcoop/domtool2.git] / src / domtool.grm
index ca9ff3a..3bbc578 100644 (file)
@@ -31,7 +31,7 @@ open Ast
  | ARROW | DARROW | LARROW
  | COLON | CARET | BANG | AND
  | LPAREN | RPAREN | LBRACK | RBRACK | LBRACE | RBRACE
- | EQ | COMMA | BSLASH | BSLASHBSLASH | SEMI | LET | IN | END
+ | EQ | COMMA | BSLASH | BSLASHBSLASH | SEMI | LET | IN | BEGIN | END
  | ROOT
  | EXTERN | TYPE | VAL | WITH | WHERE | CONTEXT
 
@@ -53,6 +53,7 @@ open Ast
  | ctxt of pred
  | recd of record
  | recdNe of record
+ | SEMIopt of unit
 
 %verbose                                (* print summary of errors *)
 %pos int                                (* positions *)
@@ -131,16 +132,20 @@ apps   : term                              (term)
        | apps term                         (EApp (apps, term), (appsleft, termright))
 
 term   : LPAREN exp RPAREN                 (exp)
+       | BEGIN exp END                     (exp)
        | INT                               (EInt INT, (INTleft, INTright))
        | STRING                            (EString STRING, (STRINGleft, STRINGright))
        | LBRACK elist RBRACK               (EList elist, (LBRACKleft, RBRACKright))
        | LET exp IN exp END                (ELocal (exp1, exp2), (LETleft, ENDright))
        | SYMBOL                            (EVar SYMBOL, (SYMBOLleft, SYMBOLright))
 
-sets   : CSYMBOL EQ apps                   ([(ESet (CSYMBOL, apps), (CSYMBOLleft, appsright))])
+sets   : CSYMBOL EQ apps SEMIopt           ([(ESet (CSYMBOL, apps), (CSYMBOLleft, appsright))])
        | CSYMBOL EQ apps SEMI sets         ((ESet (CSYMBOL, apps), (CSYMBOLleft, appsright))
                                            :: sets)
 
+SEMIopt: SEMI                              ()
+       |                                   ()
+
 elist  :                                   ([])
        | elistNe                           (elistNe)