【文章內(nèi)容簡介】
)} T?( E ) { := } T?num { := mkleaf(‘NUM’,) } T?id { := mkleaf(‘ID’,) } E? T { := } R { := } R? + T{ := mknode(‘+’, , ) } R1 { := } R? T { := mknode(‘’, , ) } R1 { := } R? ? { := } //返回最終語法樹 (其余不變,略) 刪除左遞歸后:引入非終結(jié)符 R 圖 構(gòu)造抽象語法樹的翻譯模式 E T nptr T nptr id R + T nptr id num id id num 4 + to entry for a to entry for c i R s R i ? 圖 使用繼承屬性構(gòu)造語法樹 指向根結(jié)點 遞歸下降翻譯器的設(shè)計 ? 對給定的適合于自頂向下翻譯的翻譯模式,下面給出設(shè)計遞歸下降翻譯器的方法。 ? A構(gòu)造一個 函數(shù) 過程,對 A的每個繼承屬性設(shè)置一個形式參數(shù),函數(shù)的返回值為A的綜合屬性(作為記錄,或指向記錄的一個指針,記錄中有若干域,每個屬性對應(yīng)一個域)。為了簡單,我們 假設(shè)每個非終結(jié)只有一個綜合屬性 。 A對應(yīng)的函數(shù)過程中,為出現(xiàn)在 A的產(chǎn)生式中的每一個文法符號的 每一個屬性都設(shè)置一個局