| LPAREN | RPAREN | LBRACK | RBRACK | LBRACE | RBRACE
| EQ | COMMA | BSLASH | SEMI | LET | IN | END
| ROOT
- | EXTERN | TYPE | VAL | WITH | WHERE
+ | EXTERN | TYPE | VAL | WITH | WHERE | CONTEXT
%nonterm
file of file
%%
-file : decls expOpt (decls, expOpt)
+file : docOpt decls expOpt (docOpt, decls, expOpt)
decls : ([])
- | decl SEMI decls (decl :: decls)
+ | decl decls (decl :: decls)
-decl : decl' docOpt (decl', docOpt, (decl'left, docOptright))
+decl : decl' SEMI docOpt (decl', docOpt, (decl'left, docOptright))
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))
+ | CONTEXT CSYMBOL (DContext CSYMBOL)
docOpt : (NONE)
| DOC (SOME DOC)