ch1:
1.翻译程序:是指将用某种语言编写的程序转换成另一种语言形式的程序的程序,如编译程序和汇编程序。
编译程序:是一种将高级语言程序(源程序)翻译成低级语言程序(目标程 序)的翻译程序。
解释程序:是一种解释、执行高级语言源程序的程序。(在词法、语法和语义分析方面与编译程序的工作原理基本相同。但在运行用户程序时,直接执行源程序或源程序的内部形式(中间代码)。因此,解释程序不产生目标程序。)
2.编译程序的几个阶段及其功能:
词法分析:从左到右一个字符一个字符地读入源程序,对构成源程序的字符流进行扫描和分解,从而识别出一个个单词。
语法分析:在词法分析的基础上将单词序列分解成各类语法短语(也称语法单位)
语义分析:审查源程序有无语义错误,为代码生成阶段收集类型信息
中间代码生成:按照语义规则,将语法分析程序分析出的语法单位转换成一定形式的中间语言代码,如逆波兰表示、树形结构、三元式、四元式。
代码优化:对前阶段产生的中间代码进行变换或改造,目的是使生成的目标代码更为高效(节省时间与空间)
目标代码生成:把中间代码变换成特定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码
*代码的优化对象:主要是中间代码
*目标代码的表现形式:绝对指令代码、可重定位的指令代码、汇编指令代码
3.必考题:对下列错误信息,请指出可能是编译的哪个阶段(词法分析、语法分析、语义分析、代码生成)报告的。
(1) else没有匹配的if——语法分析阶段
(2)数组下标越界——语义分析阶段
(3) 使用的函数没有定义——语法分析阶段
(4)在数中出现非数字字符——词法分析阶段
4.几个概念:
(1) 编译程序:如果源语言为高级语言,目标语言为某台计算机上的汇编语言或机器语言,则此翻译程序称为编译程序。
(2) 源程序:源语言编写的程序称为源程序。
(3) 目标程序:目标语言书写的程序称为目标程序。
(4) 编译程序的前端:它由这样一些阶段组成:这些阶段的工作依赖于源语言而与目标机无关。(通常前端包括词法分析、语法分析、语义分析和中间代码生成这些阶段,某些优化工作也可在前端做,也包括与前端每个阶段相关的出错处理工作和符号表管理等工作。)
(5)后端:指那些依赖于目标机而不依赖源语言,只与中间代码有关的那些阶段,即目标代码生成,以及相关出错处理和符号表操作。
(6) 遍:对源程序或中间结果从头到尾扫描一次,并做加工处理,生成新的中间结果或目标程序的过程。
ch3:
1.文法和语言的关系:给定一个文法,就能唯一地确定其语言;给定一种语言,能确定其文法,但不唯一。
2.句子一定是句型,句型不一定是句子。
3.正闭包除去空字符串,星闭包包含空字符串。
4.最左推导 :每次推导都是先替换最左边的非终结符
最右推导(规范推导): 每次推导都是先替换最右边的非终结符
*最右推导的逆过程是最左规约(规范规约),最左推导的逆过程是最右规约。
领取专属 10元无门槛券
私享最新 技术干货