学习好资料欢迎下载四川大学编译原理复习要点2013 版一、编译器各个阶段的功能,输入、输出,前端、后端1) 词法分析: 将字符序列收集到称作记号(t o k e n)的有意义单元中扫描程序输入:源代码输出:记号2)语法分析: 从扫描程序中获取记号形式的源代码,并完成定义程序结构的语法分析,语法分析定义了程序的结构元素及其关系。输入:记号输出:语法树3) 语义分析程序:分析程序的静态语义,包括声明和类型检查。输入:语法树输出:注释树4) 源代码优化程序:编译器通常包括许多代码改进或优化步骤。绝大多数最早的优化步骤是在语义分析之后完成的,而此时代码改进可能只依赖于源代码。【对源代码进行优化,并产生中间代码】输入:注释树输出:中间代码5) 目标代码生成:得到中间代码,生成目标机器的代码代码生成器输入:中间代码输出:目标代码6) 目标代码优化程序:编译器改进由代码生成器生成的目标代码。输入:目标代码输出:目标代码扫描程序、分析程序和语义分析程序是前端,代码生成器是后端,前后端分开的好处:可以给编译器带来更方便的可移植性,此时的编译器既能改变源代码,又能改变目标代码。【遍】 编译器发现, 在生成代码之前多次处理整个源程序很方便,这些重复就是遍。首遍是从源中构造一个语法树或中间代码,在它之后的遍是由处理中间表示、向它增加信息、更换结构或生成不同的表示组成二、 解释器和编译器的区别与联系?读入源语言后,解释器和编译器都要进行词法分析、语法分析和语义分析,之后,二者开始有所分别。 解释器在语义分析后选择了直接执行语句;编译器在语义分析后选择将将语义存储成某一种中间语言,之后通过不同的后端翻译成不同的机器语言(可执行程序)编译器是把源语言(如C,Pascal,java 等高级语言)转换为目标语言(汇编语言、机器语言等低级语言) ,要产生目标代码。解释器是以一个源语言(C,Pascal,java 等高级语言)为输入,一边解释一边执行源程序,但不产生目标代码。学习好资料欢迎下载三、算法描述(伪代码)p41 构造一个扫描程序的自动过程:正则表达式→NFA →DFA→程序1、正则表达式→NFA (1) 建立字母表。输入的正则表达式由于一般不输入“与”操作符,因此首先给表达式加入 .作为与操作。再利用逆波兰式的堆栈操作,把操作符与字母分开,便得到了字母表。(2) Thompson 构造法。首先将构成正则表达式的各个元素分解,对于每一个元素,按照下述规则...