diff --git a/WEGA/contrib/lcc/cmd/cpp/cpy.y b/WEGA/contrib/lcc/cmd/cpp/cpy.y new file mode 100644 index 0000000..df11535 --- /dev/null +++ b/WEGA/contrib/lcc/cmd/cpp/cpy.y @@ -0,0 +1,82 @@ +/* ~(#)cpy.y 2.1 */ +/* ~(#)cpy.y 1.1 */ +%term number stop DEFINED +%term EQ NE LE GE LS RS +%term ANDAND OROR +%left ',' +%right '=' +%right '?' ':' +%left OROR +%left ANDAND +%left '|' '^' +%left '&' +%binary EQ NE +%binary '<' '>' LE GE +%left LS RS +%left '+' '-' +%left '*' '/' '%' +%right '!' '~' UMINUS +%left '(' '.' +%% +S: e stop ={return($1);} + + +e: e '*' e + ={$$ = $1 * $3;} + | e '/' e + ={$$ = $1 / $3;} + | e '%' e + ={$$ = $1 % $3;} + | e '+' e + ={$$ = $1 + $3;} + | e '-' e + ={$$ = $1 - $3;} + | e LS e + ={$$ = $1 << $3;} + | e RS e + ={$$ = $1 >> $3;} + | e '<' e + ={$$ = $1 < $3;} + | e '>' e + ={$$ = $1 > $3;} + | e LE e + ={$$ = $1 <= $3;} + | e GE e + ={$$ = $1 >= $3;} + | e EQ e + ={$$ = $1 == $3;} + | e NE e + ={$$ = $1 != $3;} + | e '&' e + ={$$ = $1 & $3;} + | e '^' e + ={$$ = $1 ^ $3;} + | e '|' e + ={$$ = $1 | $3;} + | e ANDAND e + ={$$ = $1 && $3;} + | e OROR e + ={$$ = $1 || $3;} + | e '?' e ':' e + ={$$ = $1 ? $3 : $5;} + | e ',' e + ={$$ = $3;} + | term + ={$$ = $1;} +term: + '-' term %prec UMINUS + ={$$ = -$2;} + | '!' term + ={$$ = !$2;} + | '~' term + ={$$ = ~$2;} + | '(' e ')' + ={$$ = $2;} + | DEFINED '(' number ')' + ={$$= $3;} + | DEFINED number + ={$$ = $2;} + | number + ={$$= $1;} +%% +# include "yylex.c"