手把手带你写一门编程语言
宫文学
北京原点代码CEO
新⼈⾸单¥59.9
1187 人已学习
课程目录
已更新 11 讲 / 共 38 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (2讲)
开篇词|让我们来写一门计算机语言吧
免费
课前热身|开始学习之前我们要准备什么?
起步篇:让一门超简单的语言跑起来 (9讲)
01|实现一门超简单的语言最快需要多久?
02|词法分析:识别Token也可以很简单吗?
03|支持表达式:解析表达式和解析语句有什么不同?
04|如何让我们的语言支持变量和类型?
05|函数实现:是时候让我们的语言支持函数和返回值了
06|怎么支持条件语句和循环语句?
07|怎么设计属于我们自己的虚拟机和字节码?
08|基于TypeScript的虚拟机(一):实现一个简单的栈机
09|基于TypeScript的虚拟机(二):丰富特性,支持跳转语句
手把手带你写一门编程语言
15
15
1.0x
00:00/00:00
登录|注册

08|基于TypeScript的虚拟机(一):实现一个简单的栈机

你好,我是宫文学。
上一节我们已经探讨了设计一个虚拟机所要考虑的那些因素,并做出了一些设计决策。那么今天这一节,我们就来实现一个初级的虚拟机。
要实现这个初级虚拟机,具体来说,我们要完成下面三方面的工作:
首先,我们要设计一些字节码,来支持第一批语言特性,包括支持函数、变量和整型数据的运算。也就是说,我们的虚拟机要能够支持下面程序的正确运行:
//一个简单的函数,把输入的参数加10,然后返回
function foo(x:number):number{
return x + 10;
}
//调用foo,并输出结果
println(foo(18));
第二,我们要做一个字节码生成程序,基于当前的 AST 生成正确的字节码。
第三,使用 TypeScript,实现一个虚拟机的原型系统,验证相关设计概念。
话不多说,开搞,让我们先设计一下字节码吧!

“设计”字节码

说是设计,其实我比较懒,更愿意抄袭现成的设计,比如 Java 的字节码设计。因为 Java 字节码的资料最充分,比较容易研究,不像 V8 等的字节码,只有很少的文档资料,探讨的人也很少。另外,学会手工生成 Java 字节码还有潜在的实用价值,比如你可以把自己的语言编译后直接在 JVM 上运行。那么我们就先来研究一下 Java 字节码的特点。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/1000字
划线
笔记
复制
该试读文章来自付费专栏《手把手带你写一门编程语言》,如需阅读全部文章,
请订阅文章所属专栏新⼈⾸单¥59.9
立即订阅
登录 后留言

精选留言(2)

  • 奋斗的蜗牛
    回答一下思考题,符号表信息可以实现函数式编程的支持
    2021-08-26
  • bjuthang
    赞👍
    2021-08-25
收起评论
2
返回
顶部