编译器概念介绍
- 编译器与解释器
- 词法分析器概念
- 语法分析与语法树概念
- 语义分析与计算概念
编译器与解释器
编译器与解释器他们之间的区别和联系
编译器 | 解释器 |
---|---|
输入整份源码 | 输入单条指令 |
输出目标语言代码 | 输出指令解释执行后结果 |
同一份代码只需编译一次 | 每次运行时均需解释 |
全量检查源码后异常提醒 | 逐行解释后异常提醒 |
不执行输出代码 | 执行每条指令输出 |
一个典型的编译过程,他所包含的几个核心步骤:
- 词法分析 ,把所有输入的关键字拆分出来,然后把各类关键字的token类型标记。
- 语法分析 ,把关键字的数组,解析成为语法树。
- 语义计算 ,对树进行遍历,把代码的运行结果求出来。
词法分析器
我们输入一个源代码文本,很长很长的字符串,包含各种缩进、注释等代码。词法分析器通过处理,去除不必要的空白和注释,返回 token 的标记数组。
- 输入
- 源码字符串文本
- 带注释、空白等无关内容
- var x = 123
- 输出
- 有序的 Tokens 数组
- 去除空白与注释
- ['var', 'x', '=', '123']
语法分析与语法树
在我们上一部分的词法分析中拿到了一个 tokens 数组,每个元素是一个 token 。这个 token 至少包含两个字段,一个是类型,另一个是内容。很多个这样的token组合在一起就是完整的源码。这个token 的数组,实际上是一个扁平的结构,这个扁平的结构最终会被我们处理成抽象的语法树。
- 输入
- Tokens 数组
- 输出
- 抽象语法树 AST(Abstract Syntax Tree)
语义分析与计算
- 输入
- AST 语法树
- 输出
- 目标代码