- 自己動手構(gòu)建編程語言:如何設(shè)計編譯器、解釋器和DSL
- (美)克林頓·L.杰弗瑞
- 615字
- 2024-05-11 19:44:56
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)容。
- Learning Neo4j
- iOS面試一戰(zhàn)到底
- Learning Java Functional Programming
- Learning Cython Programming
- Java程序設(shè)計實戰(zhàn)教程
- 工程軟件開發(fā)技術(shù)基礎(chǔ)
- C/C++算法從菜鳥到達人
- 軟件測試工程師面試秘籍
- 微服務(wù)設(shè)計原理與架構(gòu)
- INSTANT MinGW Starter
- Expert Data Visualization
- Java Web程序設(shè)計任務(wù)教程
- Python機器學(xué)習(xí)之金融風(fēng)險管理
- QPanda量子計算編程
- Java Web從入門到精通(第2版)