【正文】
:= T1. code || “?” || F. code。 T. op := times 例 題 4 T ? F T. code := F. code。 T. op := F. op F ? id F. code := id. lexeme。 F. op := id F ? ( E ) F. code := E. code。 F. op := E. op 例 題 4 第二種方法 ? 給 E, T和 F兩個繼承屬性 left_op和 right_op 分別表示左右兩側(cè)算符的優(yōu)先級 ? 給它們一個綜合屬性 self_op表示自身主算符的優(yōu)先級 ? 再給一個綜合屬性 code表示沒有冗余括號的代碼 。 ? 分別用 1和 2表示加和乘的優(yōu)先級 , 用 3表示id和 (E)的優(yōu)先級 , 用 0表示左側(cè)或右側(cè)沒有運(yùn)算對象的情況 。 例 題 4 S? ? E E. left_op := 0。 E. right_op := 0。 print ( E. code ) E ? E1 + T E1. left_op := E. left_op。 E1. right_op := 1。 T. left_op := 1。 T. right_op := E. right_op。 :=|| “+” || T. code 。 E. self_op := 1。 E ? T T. left_op := E. left_op。 T. right_op := E. right_op。 E. code := T. code。 E. self_op := T. self_op 例 題 4 T ? T1 ? F T1. left_op := T. left_op。 T1. right_op := 2。 F. left_op := 2。 F. right_op := T. right_op。 :=|| “*” || F. code 。 T. self_op := 2。 T ? F F. left_op := T. left_op。 F. right_op := T. right_op。 T. code := F. code。 T. self_op := F. self_op F ? id F. code := id. lexeme。 F. self_op := 3 例 題 4 F ? ( E ) E. left_op := 0。 E. right_op := 0。 F. self_op := if (F. left_op E. self_op) and (E. self_op = F. right_op) then E. self_op else 3 F. code := if (F. left_op E. self_op) and (E. self_op = F. right_op) then E. code else “(” || E. code || “)”