编译原理

把人能够理解的语言变成机器能够执行的语言

编译流程

源代码

function add(a, b) { return a + b; }

词法分析

function, add (, a, ,, b, ) {, return, a, +, b, ; }

语法分析

FunctionDecl ├─ name: add └─ body: Block

语义分析

类型检查 作用域解析

机器码

01001001 11001100 10101010
umb>
抽象语法树 (AST)

代码 → 树形结构,表达程序的语法结构

函数定义
+
参数 a
参数 b
函数本质 = 环境

每次函数调用都会创建一个新的执行环境

函数执行环境

作用域链

变量查找路径

变量对象

存储局部变量

this 绑定

上下文对象

编程语言层级

高级语言

人容易理解,接近自然语言

x = a + b

中间代码

编译器内部表示,便于优化

add a, b -> x

汇编语言

助记符,对应机器指令

MOV EAX, [a] ADD EAX, [b]

机器语言

二进制,CPU直接执行

10110000 00101101