aboutsummaryrefslogtreecommitdiff
path: root/parser.y
blob: 1b503bd40506025b15ce42bead2fa46189d5b9dd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
%{
package main

import "fmt"
%}

%union {
	sval   S
	ival   I
	fval   F
	cval   C
	any    interface{}
	vector []interface{}
}

%token <sval> STRING QUOTED
%token <ival> INTEGER
%token <fval> FLOAT
%token <cval> COMPLEX

%token QUOTE DOT RAVEL SLASH BACKSLASH LBRACE RBRACE LBRACKET RBRACKET
%token PLUS MINUS
%token DIAMOND EACH NEG LESS LESSEQ EQ MOREEQ MORE NEQ OR AND TIMES DIV
%token GRADEDOWN GRADEUP ROTH TRANSPOSE ROTV LOG NOR NAND FACTORIAL INVERSE
%token ROLL OMEGA EPSILON RHO NOT TAKE DROP IOTA PI EXP ASSIGN BRANCH
%token QUOTEQUAD ZILDE
%token ALPHA CEILING FLOOR DEL DELTA JOT QUAD EXECUTE FORMAT
%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)) }

vector
	: value			{ $$ = append($$, $1) }
	| vector value		{ $$ = append($1, $2) }

value
	: STRING		{ $$ = $1 }
	| QUOTED		{ $$ = $1 }
	| INTEGER		{ $$ = $1 }
	| FLOAT			{ $$ = $1 }
	| COMPLEX		{ $$ = $1 }

monadic
	: ROLL
	| CEILING
	| FLOOR
	| RHO
	| NOT
	| MAGNITUDE
	| IOTA
	| EXP
	| MINUS
	| PLUS
	| TIMES
	| DIV
	| RAVEL
	| INVERSE
	| PI
	| LOG
	| ROTV
	| ROTH
	| GRADEUP
	| GRADEDOWN
	| EXECUTE
	| FORMAT
	| TRANSPOSE
	| FACTORIAL

dyadic
	: PLUS
	| MINUS
	| TIMES
	| DIV
	| EXP
	| PI
	| ROLL
	| EPSILON
	| CEILING
	| FLOOR
	| RHO
	| TAKE
	| DROP
	| DECODE
	| ENCODE
	| MAGNITUDE
	| RAVEL
	| BACKSLASH
	| SLASH
	| IOTA
	| INVERSE
	| ROTH
	| ROTV
	| LOG
	| FORMAT
	| TRANSPOSE
	| FACTORIAL
	| EACH
	| LESS
	| LESSEQ
	| EQ
	| MOREEQ
	| MORE
	| NEQ
	| OR
	| AND
	| NOR
	| NAND

adverb
	: SLASH
	| REDUCE
	| BACKSLASH
	| SCAN
	| DOT
	| JOT

%%