X-Git-Url: https://git.hcoop.net/hcoop/domtool2.git/blobdiff_plain/a22c187b7b983dad6b0e2c34cd0ab74e95c2411b..27d9de59634e853cac7adf09c9a7f82b3da5fcdc:/src/domtool.grm diff --git a/src/domtool.grm b/src/domtool.grm index 3384492..1ad3a5b 100644 --- a/src/domtool.grm +++ b/src/domtool.grm @@ -17,6 +17,7 @@ *) (* Parser for Domtool configuration files *) + open Ast %% @@ -27,7 +28,8 @@ open Ast | SYMBOL of string | CSYMBOL of string | STRING of string | INT of int - | ARROW | DARROW | COLON | CARET | BANG | AND + | ARROW | DARROW | LARROW + | COLON | CARET | BANG | AND | LPAREN | RPAREN | LBRACK | RBRACK | LBRACE | RBRACE | EQ | COMMA | BSLASH | SEMI | LET | IN | END | ROOT @@ -41,7 +43,7 @@ open Ast | elistNe of exp list | clist of exp list | typ of typ - | ctxt of context + | ctxt of pred | recd of record | recdNe of record @@ -68,7 +70,9 @@ open Ast file : exp (exp) exp : apps (apps) - | BSLASH SYMBOL COLON LPAREN typ RPAREN ARROW exp (ELam (SYMBOL, typ, exp), (BSLASHleft, expright)) + | BSLASH SYMBOL COLON LPAREN typ RPAREN ARROW exp (ELam (SYMBOL, SOME typ, exp), + (BSLASHleft, expright)) + | BSLASH SYMBOL ARROW exp (ELam (SYMBOL, NONE, exp), (BSLASHleft, expright)) | CSYMBOL EQ exp (ESet (CSYMBOL, exp), (CSYMBOLleft, expright)) | exp SEMI exp (let val ls = case #1 exp2 of @@ -77,6 +81,7 @@ exp : apps (apps) in (ESeq ls, (exp1left, exp2right)) end) + | SYMBOL LARROW CSYMBOL SEMI exp (EGet (SYMBOL, CSYMBOL, exp), (SYMBOLleft, expright)) apps : term (term) | apps term (EApp (apps, term), (appsleft, termright)) @@ -85,18 +90,9 @@ term : LPAREN exp RPAREN (exp) | INT (EInt INT, (INTleft, INTright)) | STRING (EString STRING, (STRINGleft, STRINGright)) | LBRACK elist RBRACK (EList elist, (LBRACKleft, RBRACKright)) - | LET exp IN exp END (let - val ls = case (#1 exp1, #1 exp2) of - (ESeq ls1, ESeq ls2) => ls1 @ ls2 - | (ESeq ls, _) => ls @ [exp2] - | (_, ESeq ls) => exp1 :: ls - | _ => [exp1, exp2] - in - (ELocal (ESeq ls, (exp1left, exp2right)), - (exp1left, exp2right)) - end) + | LET exp IN exp END (ELocal (ESeq [exp1, exp2], (LETleft, ENDright)), + (LETleft, ENDright)) | SYMBOL (EVar SYMBOL, (SYMBOLleft, SYMBOLright)) - | CSYMBOL (EEnv CSYMBOL, (CSYMBOLleft, CSYMBOLright)) elist : ([]) | elistNe (elistNe) @@ -107,11 +103,11 @@ elistNe: exp ([exp]) typ : SYMBOL (TBase SYMBOL, (SYMBOLleft, SYMBOLright)) | LBRACK typ RBRACK (TList typ, (LBRACKleft, RBRACKright)) | typ ARROW typ (TArrow (typ1, typ2), (typleft, typright)) - | LBRACK ctxt RBRACK recd DARROW recd (TAction (ctxt, recd1, recd2), (ctxtleft, recd2right)) + | LBRACK ctxt RBRACK recd DARROW recd (TAction (ctxt, recd1, recd2), (LBRACKleft, recd2right)) | LBRACK ctxt RBRACK recd (TAction (ctxt, recd, StringMap.empty), - (ctxtleft, recdright)) + (LBRACKleft, recdright)) | LBRACK ctxt RBRACK (TAction (ctxt, StringMap.empty, StringMap.empty), - (ctxtleft, ctxtright)) + (LBRACKleft, ctxtright)) | LPAREN typ RPAREN (typ) recd : LBRACE RBRACE (StringMap.empty)