《编译原理》复习题题型:选择题简述题计算题综合(证明)题第一章引论1、运行编译程序的计算机称为?而运行目标程序的计算机称为?宿主机;目标机2、何谓编译程序?编译程序的输入是?输出是?编译程序:把某一种高级语言程序等价地转换成另一种低级语言程序(如汇编语言或机器语言程序)的程序;输入:源程序;输出:目标程序;3、请说明编译程序的逻辑结构。
即,画出其逻辑结构图。
4、编译程序的“前端”主要由与源语言有关但与(目标机器)无关的哪些部分组成?编译前端:与源语言有关,如词法分析,语法分析,语义分析与中间代码产生,与机器无关的优化5、编译程序的“后端”主要由与(源语言)无关但与(目标机器)相关的哪些部分组成?编译后端:与目标机有关,与目标机有关的优化,目标代码产生6、要在某种机器上为某程序语言构造编译程序,必须掌握那几方面的内容?构造编译程序的前提:1掌握源语言;2掌握目标语言;3掌握编译方法7、编译程序的生成方法有哪些?方法:1高级语言书写;2移植方法;3自编译方式第二章 高级语言及语法描述1、简述语言的定义,并写出文法G 定义的语言的集合表示。
语言由语法跟语义(语用)定义;},|{)(*TV S G L ∈⇒=+ααα 2、给定文法G ,如何写出由G 生成的语言的集合表示?(1、2题结合看,并看不懂他问什么ORZ )3、语法规则用来描述什么?(语言的形式结构)语法规则定义了程序的形式结构4、程序设计语言的语法规则描述方法是什么?语法规则描述方法:上下文无关文法5、上下文无关文法由哪几部分组成?其中的终结符号集合、非终结符号集合如何规定?6、怎样进行句子(句型)的最左推导?最右推导?7、以形式语言的文法规则手段,描述指定语言方法这不是一个祈使句吗,问题在哪(╯‵□′)╯︵┻━┻8、怎样画出给定句子(句型)的语法分析树?语法树的根结由开始符号所标记。
随着推导的展开,当某个非终结符被它的某个候选式所替换时,这个非终结符的相应结就产生出下一代新结,候选式中自左至右的每个符号对应一个新结,并用这些符号标记其相应的新结。
每个新结和其父结间都有一条连线。
在一棵语法树生长过程中的任何时刻,所有那些没有后代的端末结自左至右排列起来就是一个句型。
9、简述二义文法的定义。
定义:如果一个文法存在某个句子对应两颗不同的语法树,则说这个文法是二义的。
10、乔姆斯基将形式语言文法分为哪几种类?在程序设计语言中有何应用?0型(短语文法,图灵机);1型(上下文有关文法,线性界限自动机);2型(上下文无关文法,非确定下推自动机);3型(正规文法,有限自动机)。
应用:可以用来描述现今多数程序设计语言的语法结构;第三章词法分析1、简述词法分析器的功能,说明词法分析阶段的基本任务是什么。
输入输出是什么?功能:输入源程序、输出单词符号;任务:从左至右逐个字符的对源程序进行扫描,产生一个个的单词符号,把作为字符串的源程序改造成为单词符号串的中间程序。
2、在词法分析器设计中,为能正确识别单词“种别”而采用的一个技术叫做什么技术?超前搜索技术3、PL/0词法分析器中采取什么手段方法来识别保留字(关键字)?当识别到字母开头的字母数字串时,先查关键字表。
若查不到则为标识符,查到则为关键字。
4、通常,设计词法分析器的一种途径(工具)是什么?这个工具可以用来做什么?状态转换图;状态转换图可用于识别(或接受)一定的字符串。
5、词法分析器依据什么对源程序字符流进行分析?它的输出是什么?依据:符号表;输出:单词符号6、在词法分析器中,预处理程序的基本功能是什么?预处理子程序:剔除无用的空白、跳格、回车和换行等编辑性字符;区分标号区、接续行和给出句末符等7、程序设计语言的词法规则常用什么文法描述?8、正规式可以用来做什么?如何求出正规式对应的正规集?正规式用来表示正规集;转换:9、自动机理论在词法分析的器构造中有何应用意义?自动机理论中一个重要的结论:判定两个自动机等价性的算法是存在的。
第四-五章语法分析1、语法分析的任务是什么?简述语法分析器的功能。
语法分析的任务是分析一个文法的句子结构。
语法分析器的功能:按照文法的产生式(语言的语法规则),识别输入符号串是否为一个句子(合式程序)。
2、从形式语言的应用来说,程序语言的语法规则通常用什么文法描述?用上下文无关文法描述语法规则3、语法分析方法分为哪两大类方法?这种分类的依据是什么?自下而上分析法(Bottom-up)与自上而下分析法(Top-down);依据:语言分析树的建立方法。
4、在语法分析的两大类分析方法中,递归下降分析法属于哪类分析方法? LR分析法属于哪类分析方法?递归下降分析法属于自上而下分析方法;LR分析法属于自下而上分析方法5、语法分析方法分为自顶向下和自下而上两大类分析方法,你了解有哪些语法分析方法?自上而下:LL(1)分析法、递归下降分析法自下而上:算符优先分析法、LR分析法6、已知文法G(S),如何指出它的句子(句型)的短语、直接短语和句柄?7、语法分析过程中的“符号”对程序语言来说指的是什么?8、如果采用自下而上分析方法,语法分析过程的实质是什么?逻辑输出是什么?实质:移进-归约;逻辑输出:开始符号S9、如何判定给定文法是LL(1)文法?G(S)是LL(1)文法的充要条件是什么?判定:1)从左向右扫描输入符号串2)第二个 L 表示生成最左推导3)读入一个符号可确定下一步推导条件:1)文法 G 不含左递归2)对于 G 的每个非终结符 A 的任何两个不同的产生式 A →α|βFIRST( α ) ∩ FIRST( β ) = φ3)对于 G 的每个非终结符A ,如果它的某个候选β ==*> ε,则FISRT( A ) ∩ FOLLOW( A ) = φ10、简述预测分析器的逻辑结构。
即,从逻辑结构上说,预测分析器由哪几部分组成?1)总控程序2)分析表 M[A,a]矩阵3)分析栈 STACK11、采用LL(1)分析方法的先决条件是什么?如何构造LL(1)文法的预测分析表?先决条件:消除文法的左递归性;克服回溯。
构造方法:1)构造FIRST(α)和FOLLOW(A);2)构造分析表M[A,a]:1. 对文法G的每个产生式A→α执行第2步和第3步;2. 对每个终结符a∈FIRST(α),把A→α加至M[A, a]中;3. 若ε∈FIRST(α),则对任何b∈FOLLOW(A)把A→ 加至M[A, b]中。
4. 把所有无定义的M[A, a]标上“出错标志”。
12、已知文法G(S),如何给出句子(句型)的“移进—归约”过程,画出语法树?移进归约过程:用一个寄存符号的先进后出栈,把输入符号一个一个地移进到栈里,当栈顶形成某个产生式的候选式时,即把栈顶的这一部分替换成(归约为)该产生式的左部符号。
语法树:从树末端开始,逐步归约至开始符号。
P89 1)当要从输入串移进一个符号a入栈时,开辟一项代表端末结a的数据结构。
2)当要把栈顶的n个符号规约为A时,开辟代表新结A的数据结构。
13、PL/0编译程序的语法分析程序,采用什么语法分析方法?递归子程序法14、简述LR分析器的逻辑结构。
即,从逻辑结构上说,LR分析器由哪几部分组成?组成:LR分析程序、分析表、栈15、什么是算符优先文法?使用算符优先分析方法的先决条件是什么?定义:按照算符的优先关系和结合性质进行语法分析。
先决条件:分析表达式16、算符优先文法的句型有什么特征?任何算符优先文法的句型中有相邻的非终结符号吗?特征:句型中含有n个终结符,任何两个终结符之间最多只有一个非终结符。
17、每个文法都能改写为SLR文法吗?每个文法都能改写为LL(1)文法吗?不是18、设文法G(S)已给定,怎样进行:(1) 消除左递归和回溯;(2) 构造预测分析表消除左递归:消除回溯:为了消除回溯就必须保证:对文法的任何非终结符,当要它去匹配输入串时,能够根据它所面临的输入符号准确地指派它的一个候选去执行任务,并且此候选的工作结果应是确信无疑的。
19、递归下降分析器有何优缺点?预测分析器有何优缺点?LR分析器有何优缺点?递归向下分析器:优点:简单直观、易于实现;缺点:对文法要求高,必须是LL(1)文法,递归调用多,影响效率。
预测分析器:优点:直观、简单,易于手工实现;缺点:效率较低LR分析器:优点:适用范围广、分析速度快、报错准确缺点:较难实现、分析表较复杂20、PL/0语法分析器,采用什么分析方法。
谁告诉我这跟第13题有什么区别(╯‵□′)╯︵┻━┻21、LR文法有可能是二义文法吗?非二义文法都是LR文法吗?LR分析方法可用于二义文法吗?LR文法都是无二义的;非二义文法不都是LR文法;null第六章属性文法语法制导翻译1、何谓属性文法?属性文法是在上下文无关文法的基础上,为每个文法符号(终结符或非终结符)配备若干先关的“值”(成为属性)。
这些属性代表与文法符号相关信息,例如它的类型、值、代码序列、符号表内容等等。
属性与变量一样,可以进行计算和传递。
属性加工过程即是语义处理的过程。
2、属性文法中为产生式配备的一组属性计算规则通常称为什么?对于文法的每个产生式都配备了一组属性的计算规则,称为语义规则。
3、何谓语法制导翻译方法?对单词符号串进行语法分析,构造语法分析树,然后根据需要遍历语法树并在语法树的各结点处按语义规则进行计算。
这种由源程序的语法结构所驱动的处理办法就是语法制导翻译法。
输入串→语法树→依赖图→语义规则计算次序第七章语义分析与中间代码生成1、语义分析与中间代码生成阶段的任务是什么?与中间代码生成器的输入输出是什么?任务:静态语义检查(类型检查、控制流检查、一致性检查、相关名字检查)和翻译;输入:源程序;输出:中间语言2、常见的中间语言形式有哪几种类?中间语言形式:后缀式、抽象语法树表示、三地址代码表示、DAG图表示3、在编译程序中安排中间代码生成阶段是必须的吗?主要优点是什么?不是必须的,优点:1)便于进行与机器无关的代码优化工作;2)使编译程序改变目标机更容易;3)使编译程序的结构在逻辑上更为简单明确。
以中间语言为界面,编译前端和后端的接口更清晰。
4、如何写出表达式的逆波兰表示、四元式代码序列表示?逆波兰表示:1. 如果E是一个变量或常量,则E的后缀式是E自身。
2. 如果E是E1 op E2形式的表达式,其中op是任何二元操作符,则E的后缀式为E1’E2’op,其中E1’和E2’分别为E1 和E2的后缀式。
3. 如果E是(E1)形式的表达式,则E1 的后缀式就是E的后缀式。
例:1)E→E(1)op E(2)E.code:= E(1).code || E(2).code ||op2)E→ (E(1)) E.code:= E(1).code3)E→id E.code:=id四元式:(一个带有四个域的记录结构,这四个域分别称为op, arg1, arg2及result,域op包含一个代表运算符的内部码。