手把手教你实现一门运行在 JVM 上的语言 Enkel, 系列 2
/ / 点击 / 阅读耗时 2 分钟本文系 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 生成字节码了。
全文完。