+file : decls expOpt (decls, expOpt)
+
+decls : ([])
+ | decl SEMI decls (decl :: decls)
+
+decl : decl' docOpt (decl', docOpt, (decl'left, docOptright))
+
+decl' : EXTERN TYPE SYMBOL (DExternType SYMBOL)
+ | EXTERN VAL SYMBOL COLON typ (DExternVal (SYMBOL, typ))
+
+docOpt : (NONE)
+ | DOC (SOME DOC)
+
+expOpt : (NONE)
+ | exp (SOME (ELocal exp, (expleft, expright)))
+