官术网_书友最值得收藏!

1.1.2 組織字節(jié)碼語言實現(xiàn)

在很大程度上,本書的結(jié)構(gòu)遵循字節(jié)碼編譯器及其相應(yīng)虛擬機的經(jīng)典組織結(jié)構(gòu)。這些組件定義如下,圖1.1進行了總結(jié):

圖1.1 簡單編程語言中的各階段和數(shù)據(jù)流

?詞法分析器(lexical analyzer)讀入源代碼字符并計算出它們是如何組合成一系列單詞或標記的。

?語法分析器(syntax analyzer)讀入一系列標記,并根據(jù)語言的文法判斷該序列是否合法。如果標記的順序是合法的,則會生成一個語法樹。

?語義分析器(semantic analyzer)檢查并確保所有正在使用的名稱對于正使用它們的操作都是合法的。它檢查它們的類型,以精準確認正在執(zhí)行的操作。所有這些檢查都會讓語法樹變得繁重,充滿了關(guān)于變量聲明位置和類型的額外信息。

?中間代碼生成器(intermediate code generator)計算出所有變量的內(nèi)存位置以及程序可能突然改變執(zhí)行流程的所有位置,例如循環(huán)和函數(shù)調(diào)用。中間代碼生成器將這些位置添加到語法樹中,然后在構(gòu)建與機器無關(guān)的中間代碼指令列表之前遍歷這棵更大的樹。

?最終代碼生成器(final code generator)將中間代碼指令列表轉(zhuǎn)換為文件格式的實際字節(jié)碼,這樣可以有效地加載和執(zhí)行。

在這個字節(jié)碼虛擬機編譯器的步驟之外,可以編寫一個字節(jié)碼解釋器(bytecode interpreter)來加載和執(zhí)行程序。這是一個包含switch語句的巨大循環(huán),但對于外來編程語言來說,編譯器可能沒什么大不了的,所有的魔法都將發(fā)生在字節(jié)碼解釋器中,整個組織可以通過圖1.1進行總結(jié)。

說明如何構(gòu)建編程語言的字節(jié)碼機器實現(xiàn)將需要大量代碼。代碼的呈現(xiàn)方式很重要,它將告訴我們需要了解的內(nèi)容,以及我們可能會從本書中學(xué)到的許多內(nèi)容。

主站蜘蛛池模板: 抚顺县| 门源| 苏尼特左旗| 海原县| 清水县| 石景山区| 丹东市| 内丘县| 凉山| 定结县| 庆元县| 遵义市| 白朗县| 察隅县| 蓝田县| 全南县| 衡水市| 勃利县| 公主岭市| 封丘县| 吴旗县| 太保市| 洛南县| 抚州市| 凌云县| 申扎县| 东至县| 楚雄市| 乌拉特后旗| 德格县| 绍兴县| 阳城县| 上思县| 巴楚县| 南开区| 汶上县| 蒙城县| 万安县| 威海市| 博罗县| 尼玛县|