第一章 引论
1.1 计算机如何执行高级语言程序/h3>
在计算机上执行一个高级语言程序一般要分为两步:第一步,用一个编译程序把高级语言翻译成机器语言程序;第二步,运行所得的机器语言程序求得计算结果。翻译程序是指能够把某一种语言程序(称为源语言程序)转换成另一种语言程序(称为目标语言程序)的程序;如果源语言是“高级语言”而目标语言是“低级语言”,那么这样的翻译程序就称为编译程序;解释程序以该语言写的源程序作为输入,但不产生目标程序,而是边解释边执行源程序本身。
1.2 编译程序的工作过程有哪几个阶段/h3>
(1)词法分析:输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个的单词(亦称单词符 或简称符 );
(2)语法分析:在词法分析的基础上,根据语言的语法规则,把单词符 串分解成各类语法单位(语法范畴);
(3)语义分析与中间代码生成:对语法分析所识别出的各类语法范畴,分析其含义,并进行初步翻译(产生中间代码);
(4)优化:对前段产生的中间代码进行加工变换,以期在最后阶段能产生出更为高效(省时间和空间)的目标代码;
(5)目标代码生成:把中间代码(或经优化处理之后)变换成特定机器上的低级语言代码。
1.3 什么是编译前端与编译后端/h3>
前端主要由与源语言有关但与目标机无关的那些部分组成;后端包括编译程序中与目标机有关的那些部分。
1.4 如何学习构造编译程序/h3>
要在某一台机器上为某种语言构造一个编译程序,必须掌握下述三方面的内容:
(1)源语言;
(2)目标语言;
(3)编译方法。
第二章 高级语言及其语法描述
2.1 什么是抽象数据类型(ADT)作用是什么/h3>
一个抽象数据类型包括:
(1)数据对象的一个集合;
(2)作用于这些数据对象的抽象运算的集合;
(3)这种类型对象的封装。
作用:增加程序的可读性和可理解性,提高可维护性,降低软件设计的复杂性。
2.2 什么是上下文无关文法(CFG)/h3>
文法是描述语言的语法结构的形式规则(即语法规则),这些规则必须是准确的,易于理解的,而且应当有相当强的描述能力,有利于句子分析和翻译,且最好能通过这些规则自动产生有效的语法分析程序。所谓上下文无关文法是这样一种文法,它所定义的语法范畴(或语法单位)是完全独立于这种范畴可能出现的环境的。对于现今的程序语言来说,上下文无关文法基本上是够用了。归纳起来,一个上下文无关文法G包括四个组成部分:一组终结符 ,一组非终结符 ,一个开始符 ,以及一组产生式。
2.3 何谓“标识符”谓“名字”者的区别是什么字的左值和右值是什么/h3>
标识符是高级语言中定义的由字母、数字和下划线组成的以字母或下划线开头的一个字符串,它只是个标志,没有其他含义;名字是用标识符表示的,用于标识程序中的对象,名字不仅仅是一个字符串,它还具有属性和值。名字的左值表示该名字所代表的存储单元的地址,右值表示该名字所代表的存储单元的内容。
第三章 词法分析
3.1 词法分析的任务是什么/h3>
从左至右逐个字符地对源程序进行扫描,产生一个个的单词符 ,把作为字符串的源程序改造成为单词符 串的中间程序,因此词法分析是编译的基础。
3.2 什么是确定有限自动机(DFA)/h3>
一个确定有限自动机(DFA)M是一个五元式:
M = ( S , Σ , δ , s 0 , F ) M=(S,Σ,δ,s_0,F) M=(S,Σ,δ,s0/span>,F)
其中:
(1) S S S是一个有限集,它的每个元素称为一个状态。(有穷状态集);
(2) Σ Σ Σ是一个有穷字母表,它的每个元素称为一个输入字符;
(3) δ δ δ是一个从 S × Σ S×Σ S×Σ至 S S S的单值部分映射;
(4) s 0 S s_0 s0/span>/span>S,是唯一的初态;
(5) F S F F/span>S,是一个终态集(可空)。
3.3 什么是非确定有限自动机(NFA)/h3>
一个非确定有限自动机(NFA)M是一个五元式:
M = ( S , Σ , δ , S 0 , F ) M=(S,Σ,δ,S_0,F) M=(S,Σ,δ,S0/span>,F)
其中:
(1) S S S是一个有限集,它的每个元素称为一个状态。(有穷状态集);
(2) Σ Σ Σ是一个有穷字母表,它的每个元素称为一个输入字符;
(3) δ δ δ是一个从 S × Σ S×Σ^* S×Σ/span>至 S S S的子集的映照;
(4) S 0 S S_0 S0/span>/span>S,是一个非空初态集;
(5) F S F F/span>S,是一个终态集(可空)。
第四章 语法分析——自上而下分析
4.1 什么是LL(1)文法/h3>
(1)文法不含左递归;
(2)文法中每一个非终结符A的各个产生式的各候选首符集两两不相交;
(3)对文法中的每个非终结符A,若它存在某个候选首符集包含 ε ε ε,则该非终结符的终结首符集与其终结随符集的交集为空。
第五章 语法分析——自下而上分析
5.1 算符优先分析与规范规约分析的区别/h3>
算符优先分析用“最左素短语”来刻画“可规约串”;在“规范规约”分析中则用“句柄”来刻画“可规约串”。
5.2 什么叫算符优先分析/h3>
(1)一种简单直观、广为使用的自下而上分析法;
(2)特别有利于表达式分析;
(3)宜于手工实现;
(4)算符优先分析法不是一种规范规约法。
5.3 什么是算符文法/h3>
如果一个文法的任一产生式的右部都不含两个相继(并列)的非终结符,即不含如下形式的产生式右部:
… Q R … …QR… …QR…
则我们称该文法为算符文法。
5.4 什么是LR文法/h3>
对于一个文法,如果能够构造一张LR分析表,使得它的每个入口均是唯一确定的,则我们将把这个文法称为LR文法。并非所有上下文无关文法都是LR文法。但对于多数程序语言来说,一般都可用LR文法描述。LR文法肯定是无二义的,一个二义文法决不会是LR的。
5.5 什么是活前缀/h3>
所谓活前缀是指规范句型的一个前缀,这种前缀不含句柄之后的任何符 。之所以称为活前缀,是因为在右边增添一些终结符 之后,就可以使它成为一个规范句型。
5.6 什么是LR(0)项目/h3>
文法G的每一个产生式的右部添加一个圆点称为G的一个LR(0)项目(简称项目)。直观上说,一个项目指明了在分析过程的某时刻我们看到产生式多大一部分。
5.7 为什么要拓广文法/h3>
(1)保证文法的开始符 不会出现在任何产生式的右部
(2)为了确定出唯一的接受项目 S ′ → S S’→S S′→S/span>
第六章 属性文法和语法制导翻译
6.1 什么是属性文法性分为哪几类/h3>
属性文法(也称属性翻译文法),它是在上下文无关文法的基础上,为每个文法符 (终结符或非终结符)配备若干相关的“值”(称为属性)。这些属性代表与文法符 相关的信息,例如它的类型、值、代码序列、符 表内容等等。属性与变量一样,可以进行计算和传递。属性加工的过程即是语义处理的过程。对于文法的每个产生式都配备了一组属性的计算规则,称为语义规则。
属性通常分为两类:综合属性和继承属性。
6.2 什么是语法制导翻译法/h3>
基于属性文法的处理过程通常是这样的:对单词符 串进行语法分析,构造语法分析树,然后根据需要遍历语法树并在语法树的各结点处按语义规则进行计算,这种由源程序的语法结构所驱动的处理办法就是语法制导翻译法。
第七章 语义分析和中间代码产生
7.1 许多编译程序采用独立于机器的、复杂性介于源语言和机器语言之间的中间语言的好处是什么/h3>
(1)便于进行与机器无关的代码优化工作;
(2)使编译程序改变目标机更容易;
(3)使编译程序的结构在逻辑上更为简单明确。
第十章 优化
10.1 什么是优化化有哪些级别/h3>
对程序进行各种等价变换,使得从变换后的程序出发,能生成更有效的目标代码,我们通常称这种变换为优化。
优化的级别:
(1)局部优化;
(2)循环优化;
(3)全局优化。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!