aboutsummaryrefslogtreecommitdiff
path: root/parser.y
diff options
context:
space:
mode:
Diffstat (limited to 'parser.y')
-rw-r--r--parser.y35
1 files changed, 21 insertions, 14 deletions
diff --git a/parser.y b/parser.y
index 0b4e43d..65bda58 100644
--- a/parser.y
+++ b/parser.y
@@ -3,7 +3,7 @@ package main
import "fmt"
-var vars = map[S][]interface{}{}
+var vars = map[S]A{}
%}
%union {
@@ -11,8 +11,7 @@ var vars = map[S][]interface{}{}
ival I
fval F
cval C
- any interface{}
- vector []interface{}
+ any A
}
%token <sval> STRING QUOTED
@@ -30,24 +29,32 @@ var vars = map[S][]interface{}{}
%token ENCLOSE DISCLOSE DECODE ENCODE MAGNITUDE SCAN REDUCE
%type <any> value
-%type <vector> vector
%%
line
: /* empty */
- | vector { fmt.Println($1) }
- | monadic vector
- | vector dyadic vector
- | adverb monadic vector
- | QUAD STRING { fmt.Println(quad(string($2))) }
- | RBRACE STRING { cmd(string($2)) }
- | STRING ASSIGN vector { vars[$1] = $3 }
+ | line expr
+
+expr
+ : monadic expr
+ | adverb monadic expr
+ | expr dyadic expr
+ | expr adverb dyadic expr
+ | dfn
+ | quad
+ | cmd
| STRING { fmt.Println(vars[$1]) }
+ | value { fmt.Println($1) }
+
+dfn
+ : STRING ASSIGN value { vars[$1] = $3 }
+
+quad
+ : QUAD STRING { fmt.Println(quad(string($2))) }
-vector
- : value { $$ = append($$, $1) }
- | vector value { $$ = append($1, $2) }
+cmd
+ : RBRACE STRING { cmd(string($2)) }
value
: QUOTED { $$ = $1 }