git.annexia.org
/
goals.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add environment to store variables and goals.
[goals.git]
/
src
/
parser.mly
diff --git
a/src/parser.mly
b/src/parser.mly
index
add72bb
..
9ce3996
100644
(file)
--- a/
src/parser.mly
+++ b/
src/parser.mly
@@
-36,10
+36,8
@@
open Printf
%token RIGHT_PAREN
%token <Ast.substs> STRING
%token RIGHT_PAREN
%token <Ast.substs> STRING
-%type <Ast.stmt> stmt
-
(* Start nonterminals. *)
(* Start nonterminals. *)
-%start <Ast.
file
> file
+%start <Ast.
env
> file
%start <Ast.expr> expr
%%
%start <Ast.expr> expr
%%
@@
-48,7
+46,11
@@
file:
;
stmts:
;
stmts:
- | list(stmt) { $1 }
+ | list(stmt)
+ { List.fold_left (
+ fun env (name, expr) -> Ast.StringMap.add name expr env
+ ) Ast.StringMap.empty $1
+ }
;
stmt:
| option(goal_stmt) patterns COLON barelist option(CODE)
;
stmt:
| option(goal_stmt) patterns COLON barelist option(CODE)
@@
-58,14
+60,14
@@
stmt:
let pos = $startpos in
sprintf "_goal@%d" pos.pos_lnum, []
| Some x -> x in
let pos = $startpos in
sprintf "_goal@%d" pos.pos_lnum, []
| Some x -> x in
-
Ast.Goal (name,
params, $2, $4, $5)
+
name, Ast.EGoal (
params, $2, $4, $5)
}
| goal_stmt CODE
{
let name, params = $1 in
}
| goal_stmt CODE
{
let name, params = $1 in
-
Ast.Goal (name,
params, [], [], Some $2)
+
name, Ast.EGoal (
params, [], [], Some $2)
}
}
- | LET ID EQUALS expr {
Ast.Let ($2, $4)
}
+ | LET ID EQUALS expr {
$2, $4
}
;
goal_stmt:
;
goal_stmt:
@@
-94,7
+96,7
@@
pattern_param:
expr:
| ID params { Ast.ECall ($1, $2) }
| ID { Ast.EVar $1 (* This might be replaced with ECall later. *) }
expr:
| ID params { Ast.ECall ($1, $2) }
| ID { Ast.EVar $1 (* This might be replaced with ECall later. *) }
- | STRING { Ast.ES
tring
$1 }
+ | STRING { Ast.ES
ubsts
$1 }
| LEFT_ARRAY barelist RIGHT_ARRAY { Ast.EList $2 }
;
barelist:
| LEFT_ARRAY barelist RIGHT_ARRAY { Ast.EList $2 }
;
barelist: