%{ int variavel[27], ultimo; #include #include SEXP _JJ; %} %union {SEXP val;} %token JINT OPREL JSYM JSTR %type JINT OPREL JSYM JSTR E %right '=' %left '+' '-' %left '*' '/' %left opuna %% Z : {_JJ=(SEXP) NULL;} E '$' {_JJ=$2; return(1);} ; E : E '+' E {$$=f2("add",$1,$3);} | E '-' E {$$=f2("sub",$1,$3);} | E '/' E {$$=f2("div",$1,$3);} | E '*' E {$$=f2("mul",$1,$3);} | JSYM '=' E {$$=f2("def",$1,$3);} | '(' E ')' {$$=$2;} | JINT {$$=$1;} | '+' E %prec opuna {$$=$2;} | '-' E %prec opuna {$$=f2("mul",intsexp(-1),$2);} | '.' {$$=symsexp("ultimo");} | JSYM {$$=$1;} | JSTR {$$=$1;} | E OPREL E {$$=conssexp($2,l2sexp($1,$3));} ; %% SEXP jjparse(d) SEXP d; { yyparse(); return _JJ;} void userinit() {xlsubr("parse",jjparse);} #include "lex.yy.c"