本文系 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
,处理流程如下图所示:
AST
创建完毕后,就可以用 Compiler
生成字节码了。
网友评论