[編譯原理] JavaScript 實(shí)現(xiàn)簡易標(biāo)記語言編譯器
目標(biāo)
目標(biāo):將一個(gè)簡單語法的標(biāo)記語言編譯為 HTML
語言語法如下:
編譯后:
編譯產(chǎn)生數(shù)組經(jīng) Array.prototype.join() 即生成所需 HTML 代碼

步驟
眾所周知,一般的編譯器在編譯過程中都要經(jīng)過?詞法分析、語法分析(生成AST)、語義分析、生成目標(biāo)代碼、錯(cuò)誤處理?等過程,但那是針對一般的編程語言,對于筆者這樣簡易的標(biāo)記語言,完全可以省略多數(shù)步驟,僅保留?詞法分析(分詞)、語法分析、生成目標(biāo)代碼?三個(gè)步驟。
那么,在開始編碼前,我們需要明確一下各階段的輸入和輸出。
詞法分析(分詞)
輸入(即原始文本):
輸出:
語法分析
因?yàn)榇a輸出仍為一維數(shù)組,沒有樹狀結(jié)構(gòu),所以不將其稱為AST。
輸入(與詞法分析輸出相同):
輸出:
生成目標(biāo)代碼
輸入(與語法分析輸出相同):
輸出(即最終代碼):

具體實(shí)現(xiàn)
全局變量
詞法分析
注:此階段將單個(gè)詞稱作`term`(雖然函數(shù)名為tokenizer)
語法分析
核心代碼如下:
完整代碼:
目標(biāo)代碼生成

完整代碼實(shí)現(xiàn)
感謝閱讀。
標(biāo)簽: