X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=src%2Fparser.mly;h=3a1712438ea132af989ef8ab2b3b727ba73e8e1c;hb=214f84c3b07227767fef90934895a167b15113a1;hp=5a2ce9b120a0d7ce10749ca551ba1e36d14adb15;hpb=c46c3a5c7793753f2f15c1655517f3f9b8fee644;p=goals.git diff --git a/src/parser.mly b/src/parser.mly index 5a2ce9b..3a17124 100644 --- a/src/parser.mly +++ b/src/parser.mly @@ -36,6 +36,7 @@ open Printf %token RIGHT_PAREN %token STRING %token TACTIC +%token TACTIC_KEYWORD (* Start nonterminals. *) %start file @@ -67,24 +68,29 @@ stmt: let name, params = $1 in name, Ast.EGoal ($loc, (params, [], [], Some $2)) } + | TACTIC_KEYWORD TACTIC params_decl EQUALS CODE + { + $2, Ast.ETactic ($loc, ($3, $5)) + } | LET ID EQUALS expr { $2, $4 } ; goal_stmt: - | GOAL ID option(param_decl) EQUALS + | GOAL ID option(params_decl) EQUALS { $2, match $3 with None -> [] | Some ps -> ps } ; -param_decl: - | LEFT_PAREN separated_list(COMMA, ID) RIGHT_PAREN { $2 } +params_decl: + | LEFT_PAREN separated_list(COMMA, param_decl) RIGHT_PAREN { $2 } ; +param_decl: + | ID { $1 } patterns: | separated_list(COMMA, pattern) { $1 } ; pattern: - | STRING { Ast.PTactic ($loc, "file", [$1]) } + | STRING { Ast.PTactic ($loc, "*file", [$1]) } | ID pattern_params { Ast.PTactic ($loc, $1, $2) } - | ID { Ast.PVar ($loc, $1) } ; pattern_params: | LEFT_PAREN separated_list(COMMA, pattern_param) RIGHT_PAREN { $2 } @@ -94,9 +100,9 @@ pattern_param: ; expr: - | ID params { Ast.ECall ($loc, $1, $2) } + | ID params { Ast.ECallGoal ($loc, $1, $2) } | ID { Ast.EVar ($loc, $1) } - | TACTIC params { Ast.ETactic ($loc, $1, $2) } + | TACTIC params { Ast.ECallTactic ($loc, $1, $2) } | STRING { Ast.ESubsts ($loc, $1) } | LEFT_ARRAY barelist RIGHT_ARRAY { Ast.EList ($loc, $2) } ;