读书笔记-编译之美
2020-04-09 本文已影响0人
clever哲思
一. 编译器的前端技术
-
编译分前端技术后端技术
image.png
这里的“前端”指的是编译器对程序代码的分析和理解过程, 而与之对应的“后端”则是生成目标代码的过程,跟目标机器有关
- 编译器的“前端”技术分为词法分析、语法分析和语义分析三个部分
- 词法分析是把程序分割成一个个Token的过程,可以通过构造有限自动机来实现。
- 语法分析是把程序的结构识别出来,并形成一棵便于由计算机处理的抽象语法树。可以用递归下降的算法 来实现。
- 语义分析是消除语义模糊,生成一些属性信息,让计算机能够依据这些信息生成目标代码。
二. 正则文法和有限自动机
- 一个严格意义上的有限自动机 是下面这种画法: image.png
- 1.初始状态:刚开始启动词法分析的时候,程序所处的状态。2.标识符状态:在初始状态时,当第一个字符是字母的时候,迁移到状态2。当后续字符是字母和数字时, 保留在状态2。如果不是,就离开状态2,写下该Token,回到初始状态。3.大于操作符(GT):在初始状态时,当第一个字符是>时,进入这个状态。它是比较操作符的一种情况。4.大于等于操作符(GE):如果状态3的下一个字符是=,就进入状态4,变成>=。它也是比较操作符的一种情况。5.数字字面量:在初始状态时,下一个字符是数字,进入这个状态。如果后续仍是数字,就保持在状态5。