【正文】
每一個(gè)函數(shù)都返回一個(gè)指向新建立結(jié)點(diǎn)的指針。 (1) mknode(op, left, right) 建立一個(gè) 運(yùn)算符號(hào)結(jié)點(diǎn) , 標(biāo)號(hào)是 op,兩個(gè)域 left和 right分別指向左子樹(shù)和右子樹(shù) . (2) mkleaf(id, entry) 建立一個(gè) 標(biāo)識(shí)符結(jié)點(diǎn) ,標(biāo)號(hào)為 id, 一個(gè)域 entry指向標(biāo)識(shí)符在符號(hào)表中的入口。 ? 一遍掃描處理方法與兩個(gè)因素有關(guān) ? 語(yǔ)法分析方法 ? 屬性的計(jì)算次序 ? 在什么時(shí)候計(jì)算一個(gè)產(chǎn)生式的語(yǔ)義規(guī)則 ? 在 自上而下 分析中,當(dāng)一個(gè)產(chǎn)生式匹配輸入串成功 ? 在 自下而上 分析中,當(dāng)一個(gè)產(chǎn)生式被用于進(jìn)行歸約時(shí) ? L屬性文法 可用于 一遍掃描 的 自上而下分析 ? S屬性文法 適合于 一遍掃描 的 自下而上分析 抽象語(yǔ)法樹(shù) ? 在抽象語(yǔ)法樹(shù)中 , 操作符 和 關(guān)鍵字 都不作為葉結(jié)點(diǎn)出現(xiàn) ,而是把它們作為內(nèi)部結(jié)點(diǎn) S ? if B then S1 else S2 ifthenelse B S1 S2 S if B then S1 else S2 抽象語(yǔ)法樹(shù) 語(yǔ)法分析樹(shù) 語(yǔ)法制導(dǎo)翻譯可以基于語(yǔ)法分析樹(shù), 也可以基于抽象語(yǔ)法樹(shù) a := b* c + b * c := E E E + E * E b E E a 賦值語(yǔ)句 c E * E b E c := a + * b c * b c 抽象語(yǔ)法樹(shù) 語(yǔ)法分析樹(shù) 如何建立表達(dá)式的抽象語(yǔ)法樹(shù) ? 抽象語(yǔ)法樹(shù)中的每一個(gè)結(jié)點(diǎn)可以由包含幾個(gè)域的記錄來(lái)實(shí)現(xiàn)的。 * 下面算法可對(duì)任何無(wú)循環(huán)的屬性文法進(jìn)行計(jì)算 While 還有未被計(jì)算的屬性 do VisitN