aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2015-03-28 16:50:57 +0100
committerDimitri Sokolyuk <demon@dim13.org>2015-03-28 16:50:57 +0100
commit784a7564678e08ad6e9325c3c6e3fea06b8213c2 (patch)
tree184b97dbda0ce1581cba2a2737dc2686142ba80a
parente9ca13d727df07ca23e876f6b02ecf1f85f43fd5 (diff)
Minor resort
-rw-r--r--format.go1
-rw-r--r--main.go2
-rw-r--r--parser.y35
3 files changed, 23 insertions, 15 deletions
diff --git a/format.go b/format.go
index 48ffcfd..e980652 100644
--- a/format.go
+++ b/format.go
@@ -6,6 +6,7 @@ type S string
type I int64
type F float64
type C complex128
+type A interface{}
func (s S) String() string {
return string(s)
diff --git a/main.go b/main.go
index c7cbe58..a4de749 100644
--- a/main.go
+++ b/main.go
@@ -18,7 +18,7 @@ func init() {
func main() {
in := bufio.NewReader(os.Stdin)
for {
- os.Stdout.WriteString("\t")
+ os.Stdout.WriteString(" ")
line, err := in.ReadString('\n')
if err == io.EOF {
return
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 }