# File PostfixWithActions.eyp %right '=' %left '-' '+' %left '*' '/' %left NEG %token NUM = /([0-9]+(?:\.[0-9]+)?)/ %token VAR = /([A-Za-z][A-Za-z0-9_]*)/ %% line: %name EXP $exp { print "$exp\n" } ; exp: %name OPERAND:NUM $NUM { $NUM } | %name OPERAND:VAR $VAR { $VAR } | %name OP:ASSIGN VAR.left '='exp.right { # & stands for 'address of' "$_[3] &$_[1] ASSIGN"; } | %name OP:PLUS exp.left '+'exp.right { "$_[1] $_[3] PLUS"; } | %name OP:MINUS exp.left '-'exp.right { "$_[1] $_[3] MINUS"; } | %name OP:TIMES exp.left '*'exp.right { "$_[1] $_[3] TIMES"; } | %name OP:DIV exp.left '/'exp.right { "$_[1] $_[3] DIV"; } | %name OP:NEG '-' $exp %prec NEG { "$exp NEG" } | '(' $exp ')' { $exp } ; %%