%right '=' %left '-' '+' %left '*' '/' %left NEG %right '^' %% start: input ; input: line * ; line: '\n' | exp '\n' ; exp: NUM | VAR | VAR '=' exp | exp '+' exp | exp '-' exp | exp '*' exp | exp '/' exp | '-' exp %prec NEG | exp '^' exp | '(' exp ')' ; %%