%{ package main import ( "fmt" "os" ) %} %union { sval S ival I fval F cval C any interface{} vector []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 vector %% line : /* empty */ | vector { fmt.Println($1) } | monadic vector | vector dyadic vector | adverb monadic vector | sysvar | syscmd 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 sysvar : QUAD STRING syscmd : RBRACE STRING { if $2 == "off" { os.Exit(0) } } %%