手拉手教你实现一门编程语言 Enkel, 系列 2

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

总的来说,我需要实现如下三个模块:

模块输入输出
Lexer(词法分析器)代码(文本格式)Token 序列
Parse(语法分析器)Token 序列AST(抽象语法书)
Compiler(编译器)ASTJVM 字节码

Lexer

词法分析器的职责是把简单的文本输入,识别为 Token(可以理解为一种记号),代码,即文本文件在词法分析之前,仅仅是无意义的字节流而已,但 Token 不同,Token 记录的类型信息对接下来的步骤很重要。

Parser

语法分析器的职责是把 Token 序列输入,组织成具有层次结构的抽象语法树(AST), AST 决定了代码是被如何执行的。

Compiler

编译器的职责是遍历 AST,并且翻译成合法的 Java 字节码。

例子

假设有表达式 int x=a*5+2,处理流程如下图所示:

AST 创建完毕后,就可以用 Compiler 生成字节码了。

转载于:https://juejin.im/post/5b914afbe51d450e9059a16f

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值