手拉手教你實現一門程式語言 Enkel, 系列 2

KevinOfNeu發表於2018-09-06

本文系 Creating JVM language 翻譯的第二篇。

總的來說,我需要實現如下三個模組:

模組 輸入 輸出
Lexer(詞法分析器) 程式碼(文字格式) Token 序列
Parse(語法分析器) Token 序列 AST(抽象語法書)
Compiler(編譯器) AST JVM 位元組碼

Lexer

詞法分析器的職責是把簡單的文字輸入,識別為 Token(可以理解為一種記號),程式碼,即文字檔案在詞法分析之前,僅僅是無意義的位元組流而已,但 Token 不同,Token 記錄的型別資訊對接下來的步驟很重要。

Parser

語法分析器的職責是把 Token 序列輸入,組織成具有層次結構的抽象語法樹(AST), AST 決定了程式碼是被如何執行的。

Compiler

編譯器的職責是遍歷 AST,並且翻譯成合法的 Java 位元組碼。

例子

假設有表示式 int x=a*5+2,處理流程如下圖所示:

手拉手教你實現一門程式語言 Enkel, 系列 2

AST 建立完畢後,就可以用 Compiler 生成位元組碼了。

相關文章