startrule : lv1expr lv1expr : lv2expr ADD lv1expr {$return = $item[1] + $item[3]} | lv2expr SUB lv1expr {$return = $item[1] - $item[3]} | lv2expr lv2expr : lv3expr MULT lv2expr {$return = $item[1] * $item[3]} | lv3expr DIV lv2expr {$return = $item[1] / $item[3]} | lv3expr lv3expr : lv4expr EXP lv3expr {$return = $item[1] ** $item[3]} | lv4expr lv4expr : '(' startrule ')' {$return = $item[2]} | NUM EXP : '^' MULT : '*' DIV : '/' ADD : '+' SUB : '-' NUM : /\d+(?:\.\d+)?/