為下面的算術(shù)表達(dá)式文法寫一個語法制導(dǎo)的翻譯方案,它將每個子表達(dá)式E的符號(即值大于零還是小于零)記錄在屬性E.sign中(屬性值分別用POS或NEG表示)。你可以假定所有的整數(shù)都不為零,這樣就不用擔(dān)心零的符號。
假設(shè)說明是由下列文法產(chǎn)生的: (a)建立一個翻譯模式,把每一個標(biāo)識符的類型加入到符號表中。 (b)從(a)中的翻譯模式構(gòu)造一個預(yù)翻譯程序。
下面的文法產(chǎn)生的表達(dá)式是對整型和實型常數(shù)應(yīng)用算符+形成的。當(dāng)兩個整數(shù)相加時,結(jié)果仍為整數(shù),否則就是實數(shù)。 (a)給出一個語法制導(dǎo)定義以確定每個子表達(dá)式的類型。 (b)擴(kuò)充(a)中的語法制導(dǎo)定義把表達(dá)式翻譯成前綴形式,并且決定類型。使用一元算符inttoreal把整型值轉(zhuǎn)換成相等的實型值,以使得前綴形式中的+的兩個操作對象是同類型的。