%{ package main import "fmt" var vars = map[string]interface{}{} %} %union { sval string ival int64 fval float64 cval complex128 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 %% line : /* empty */ | 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))) } cmd : RBRACE STRING { cmd(string($2)) } value : 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 %%