%{ package main import "fmt" %} %union { sval S sv []S ival I iv []I fval F fv []F cval C cv []C any interface{} } %token STRING QUOTED %token INTEGER %token FLOAT %token 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 value %type ivector %type fvector %type cvector %% line : /* empty */ | value { fmt.Println($1) } value : STRING { $$ = $1 } | QUOTED { $$ = $1 } | ivector { $$ = $1 } | fvector { $$ = $1 } | cvector { $$ = $1 } ivector : INTEGER { $$ = append($$, $1) } | ivector INTEGER { $$ = append($1, $2) } fvector : FLOAT { $$ = append($$, $1) } | fvector FLOAT { $$ = append($1, $2) } | fvector INTEGER { $$ = append($1, F($2)) } cvector : COMPLEX { $$ = append($$, $1) } | cvector COMPLEX { $$ = append($1, $2) } | cvector FLOAT { $$ = append($1, C(complex($2, 0))) } | cvector INTEGER { $$ = append($1, C(complex(F($2), 0))) } %%