私は、Muchnick の「Advanced Compiler Design & Implementation」を読んでいます。図 12.6 には、20 の変換規則がリストされており、順番に適用すると、定数の折りたたみと再関連付けを行って定数を一緒に移動します。規則 (分配規則を除く) は次のとおりです (私の構文: c
areliters、t
terms、前後にスペースがある演算子はソースに含まれますが、スペースのない演算子はリテラルを含むコンパイル時の計算を示します):
R1: c1 + c2 = c1+c2 R3: c1 * c2 = c1*c2 R5: c1 - c2 = c1-c2 R2: t + c = c + t R4: t * c = c * t R6: t - c = (-c) + t R7: t1 + (t2 + t3) = (t1 + t2) + t3 R8: t1 * (t2 * t3) = (t1 * t2) * t3 R9: (c1 + t) + c2 = (c1+c2) + t R10: (c1 * t) * c2 = (c1 * c2) * t
彼は「与えられた順序でツリー変換ルール [..] を再帰的に適用する」と書いていますが、それがどのように機能するかわかりません。を考えると((c1 + t1) + t2) + c2
、ルールをどのように適用して取得する(c1+c2 + t1) + t2
か、または同様のものにする必要がありますか?
(うまくいく別のルールセットを考え出すこともできますが、間違って読んでいる場合に備えて、本の内容を理解したいと思います)。