Implement functions.
[goals.git] / src / parser.mly
index b84ac15..c3148ca 100644 (file)
@@ -40,7 +40,7 @@ let find_on_include_path filename =
   )
 
 let do_include env loc filename optflag file =
-  let filename = Ast.substitute env loc filename in
+  let filename = Eval.substitute env loc filename in
   let filename = find_on_include_path filename in
   if optflag && not (Sys.file_exists filename) then env
   else (
@@ -61,6 +61,7 @@ let do_include env loc filename optflag file =
 %token COMMA
 %token EQUALS
 %token EOF
+%token FUNCTION
 %token GOAL
 %token <string> ID
 %token INCLUDE
@@ -108,6 +109,10 @@ stmt:
       let name, params = $1 in
       name, Ast.EGoalDefn ($loc, (params, [], [], Some $2))
     }
+    | FUNCTION ID params_decl EQUALS CODE
+    {
+      $2, Ast.EFuncDefn ($loc, ($3, $5))
+    }
     | TACTIC_KEYWORD TACTIC params_decl EQUALS CODE
     {
       $2, Ast.ETacticDefn ($loc, ($3, $5))
@@ -140,7 +145,7 @@ pattern_param:
     ;
 
 expr:
-    | ID params  { Ast.ECallGoal ($loc, $1, $2) }
+    | ID params  { Ast.ECall ($loc, $1, $2) }
     | ID         { Ast.EVar ($loc, $1) }
     | TACTIC params { Ast.ETacticCtor ($loc, $1, $2) }
     | STRING     { Ast.ESubsts ($loc, $1) }