通过JS语言为入口,学习实践编译原理。
面对JS复杂的语言实现,选择穿越历史迷雾,站在Brendan Eich的视角上,利用现代的思想和知识站来演变这门语言。
理解和实践之间有巨大的鸿沟,如果不去实践理解,那么永远都是纸上谈兵,没有任何战斗力。
建议阅读 JavaScript 20年
Mozilla JavaScript 1.1-1.8.5
Exploring JS
how to read ES
v8 changelog
- 超简单的解释器
js
:super tiny interpreter - 超简单的解释器
c++
:super tiny interpreter - 简单的js解释器
js
:tiny interpreter - 简单的js解释器
c++
:tiny interpreter - 基于js实现es5语法的解释器:acorn interpreter es5
- 超简单解释器基于栈机解释
js
:super tiny virtual machine - 超简单解释器基于栈机解释
c++
:super tiny virtual machine - 简单解释器基于栈机解释
js
:tiny virtual machine - 简单解释器基于栈机解释
c++
:tiny virtual machine - LLVM 第一个语言教程 kaleidoscope
- 词法分析
- 语法分析和抽象语法树
- 代码生成 LLVM IR
- 添加 JIT 和代码优化
- 扩展支持控制流
- 扩展支持用户定义操作符
- 扩展支持修改变量
- 编译成目标文件
- 支持 Debug
- 基于 babel 实现原型栈机解释器
js
- 基础类型
- 算数表达式
- 一等公民函数
- 嵌套函数声明
- 对象数据类型
- 函数表达式
- 函数的 call 和 apply 方法
- 基于原型的继承
- 闭包
- 对 undefined 的全局绑定
- try-catch-finally 语句
- 跳过语法树基于字节码的原型栈机解释器
c++