%token NAME NUMBER %left '+' '-' %left '*' '/' %right POWOP %right ASSIGNOP %right '?' ':' %left ',' %% computation : statement computation | /* empty */ ; statement : expr ';' | assignment ';' | ';' ; expr : '(' expr ')' | expr '+' expr | expr '-' expr | expr '*' expr | expr '/' expr | expr POWOP expr | expr '?' expr ':' expr | expr ',' expr | assignment | NAME | NUMBER ; assignment : NAME ASSIGNOP expr ;