X-Git-Url: https://git.hcoop.net/hcoop/domtool2.git/blobdiff_plain/8cbb96323335d1a2b42a9daac94a9d538ab93536..8230d01037874c933554158251c0e8c80be0613a:/src/domtool.grm diff --git a/src/domtool.grm b/src/domtool.grm index 532dad9..ea6db74 100644 --- a/src/domtool.grm +++ b/src/domtool.grm @@ -32,8 +32,9 @@ open Ast | COLON | CARET | BANG | AND | LPAREN | RPAREN | LBRACK | RBRACK | LBRACE | RBRACE | EQ | COMMA | BSLASH | BSLASHBSLASH | SEMI | LET | IN | BEGIN | END - | ROOT - | EXTERN | TYPE | VAL | WITH | WHERE | CONTEXT + | IF | THEN | ELSE + | ROOT | SKIP + | EXTERN | TYPE | VAL | ENV | WITH | WHERE | CONTEXT %nonterm file of file @@ -64,6 +65,7 @@ open Ast %name Domtool +%nonassoc THEN ELSE %right SEMI %nonassoc COLON %nonassoc IN @@ -88,14 +90,15 @@ decl' : EXTERN TYPE SYMBOL (DExternType SYMBOL) | EXTERN VAL SYMBOL COLON typ (DExternVal (SYMBOL, typ)) | VAL SYMBOL EQ exp (DVal (SYMBOL, NONE, exp)) | VAL SYMBOL COLON typ EQ exp (DVal (SYMBOL, SOME typ, exp)) + | ENV CSYMBOL EQ exp (DEnv (CSYMBOL, NONE, exp)) + | ENV CSYMBOL COLON typ EQ exp (DEnv (CSYMBOL, SOME typ, exp)) | CONTEXT CSYMBOL (DContext CSYMBOL) docOpt : (NONE) | DOC (SOME DOC) expOpt : (NONE) - | exp (SOME (ELocal (exp, (ESkip, (expleft, expright))), - (expleft, expright))) + | exp (SOME exp) exp : apps (apps) @@ -128,6 +131,7 @@ exp : apps (apps) | exp SEMI (exp) | SYMBOL LARROW CSYMBOL SEMI exp (EGet (SYMBOL, NONE, CSYMBOL, exp), (SYMBOLleft, expright)) | SYMBOL COLON typ LARROW CSYMBOL SEMI exp (EGet (SYMBOL, SOME typ, CSYMBOL, exp), (SYMBOLleft, expright)) + | IF exp THEN exp ELSE exp END (EIf (exp1, exp2, exp3), (IFleft, ENDright)) apps : term (term) | apps term (EApp (apps, term), (appsleft, termright)) @@ -139,6 +143,7 @@ term : LPAREN exp RPAREN (exp) | LBRACK elist RBRACK (EList elist, (LBRACKleft, RBRACKright)) | LET exp IN exp END (ELocal (exp1, exp2), (LETleft, ENDright)) | SYMBOL (EVar SYMBOL, (SYMBOLleft, SYMBOLright)) + | SKIP (ESkip, (SKIPleft, SKIPright)) sets : CSYMBOL EQ apps SEMIopt ([(ESet (CSYMBOL, apps), (CSYMBOLleft, appsright))]) | CSYMBOL EQ apps SEMI sets ((ESet (CSYMBOL, apps), (CSYMBOLleft, appsright))