4

私は、Muchnick の「Advanced Compiler Design & Implementation」を読んでいます。図 12.6 には、20 の変換規則がリストされており、順番に適用すると、定数の折りたたみと再関連付けを行って定数を一緒に移動します。規則 (分配規則を除く) は次のとおりです (私の構文: careliters、tterms、前後にスペースがある演算子はソースに含まれますが、スペースのない演算子はリテラルを含むコンパイル時の計算を示します):

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か、または同様のものにする必要がありますか?

(うまくいく別のルールセットを考え出すこともできますが、間違って読んでいる場合に備えて、本の内容を理解したいと思います)。

4

1 に答える 1