编译原理_简答题
编译原理题库
编译原理题库
1. 什么是编译原理?
编译原理是研究将高级程序语言翻译成为机器语言的原理和方法的学科。
2. 编译器的主要功能是什么?
编译器的主要功能包括词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等。
3. 什么是词法分析?
词法分析是将输入的字符流转化为标记流的过程。
4. 什么是语法分析?
语法分析是将词法分析得到的标记流转化为语法树的过程。
5. 什么是语义分析?
语义分析是对语法树进行解析,检查程序中是否存在语义错误或不符合语言规范的地方。
6. 什么是中间代码生成?
中间代码生成是将语义分析得到的语法树转化为中间表示形式,以便进行后续的代码优化和目标代码生成。
7. 什么是代码优化?
代码优化是对中间代码进行优化,以提高程序的执行效率和空间利用率。
8. 什么是目标代码生成?
目标代码生成是将优化后的中间代码转化为机器语言的过程。
9. 什么是语法制导翻译?
语法制导翻译是一种以语法规则为基础,通过对语法树的遍历和语义规则的应用来进行翻译的方法。
10. 什么是LL(1)文法?
LL(1)文法是一种上下文无关文法,它具有左递归和左因子的特点,并且在进行预测分析时每个非终结符的每个可能产生式都有唯一的选择。
编译原理小题答案
《编译原理》常见题型一、填空题1.编译程序的工作过程一般可以划分为词法分析,语法分析,中间代码生成,代码优化(可省) ,目标代码生成等几个基本阶段。
2.若源程序是用高级语言编写的,目标程序是机器语言程序或汇编程序,则其翻译程序称为编译程序.递归下降分析法是自顶向下分析方法。
22.自顶向下的语法分析方法的基本思想是:从文法的开始符号开始,根据给定的输入串并按照文法的产生式一步一步的向下进行直接推导,试图推导出文法的句子,使之与给定的输入串匹配。
23.自底向上的语法分析方法的基本思想是:从给定的终结符串开始,根据文法的规则一步一步的向上进行直接归约,试图归约到文法的开始符号。
24.自底向上的语法分析方法的基本思想是:从输入串入手,利用文法的产生式一步一步地向上进行直接归约,力求归约到文法的开始符号。
26.在LR(0)分析法的名称中,L的含义是自左向右的扫描输入串,R的含义是最左归约,0 的含义是向貌似句柄的符号串后查看0个输入符号。
31.终结符只有综合属性,它们由词法分析器提供。
32.在使用高级语言编程时,首先可通过编译程序发现源程序的全部A(语法)错误和B (语义)部分错误.34.一个句型中的最左简单短语称为该句型的__句柄___。
36.从功能上说,程序语言的语句大体可分为_执行性____语句和说明性____语句两大类。
37.语法分析是依据语言的__语法_规则进行的,中间代码产生是依据语言的_语义___规进行的。
38.语法分析器的输入是_单词符号____,其输出是_语法单位____。
40.逆波兰式ab+c+ d*e- 所表达的表达式为__(a+b+c)*d-c__ 。
41.计算机执行用高级语言编写的程序主要有两种途径:_解释__和_编译__。
42.自上而下分析法采用___移进_、归约、错误处理、接受__等四种操作。
43.一个LR分析器包括两部分:一个总控程序和_一张分析表___。
___二、单选题1.一个编译程序中,不仅包含词法分析,( A),中间代码生成,代码优化,目标代码生成等五个部分。
编译原理试题及答案
编译原理试题及答案
编译原理是计算机科学中的一门重要课程,它涉及到程序设计语言的语法、语义分析以及编译器的设计与实现等内容。
下面我们将为大家提供一些编译原理的试题及答案,希望能够帮助大家更好地理解和掌握这门课程的知识。
1. 什么是编译原理?
编译原理是研究编译器的设计与实现的一门学科,它主要包括词法分析、语法分析、语义分析、中间代码生成、代码优化和代码生成等内容。
2. 什么是词法分析?
词法分析是编译原理中的一个重要内容,它主要负责将源程序转换成一个个的单词符号,也就是词法单元。
3. 什么是语法分析?
语法分析是编译原理中的另一个重要内容,它主要负责将词法单元序列转换成抽象语法树,以便进行后续的语义分析和中间代码生成。
4. 什么是语义分析?
语义分析是编译原理中的一个关键环节,它主要负责对源程序进行语义检查,以确保程序的正确性和合法性。
5. 什么是中间代码生成?
中间代码生成是编译原理中的一个重要环节,它主要负责将源程序转换成一种中间形式的代码,以便进行后续的代码优化和代码生成。
6. 什么是代码优化?
代码优化是编译原理中的一个关键环节,它主要负责对中间代码进行优化,以提高程序的执行效率和减少资源消耗。
7. 什么是代码生成?
代码生成是编译原理中的最后一个环节,它主要负责将优化后的中间代码转换成目标机器代码,以便计算机能够执行。
以上就是关于编译原理的一些试题及答案,希望能够帮助大家更好地理解和掌握这门课程的知识。
如果大家对编译原理还有其他疑问,可以随时向我们提问,我们将竭诚为大家解答。
编译原理试题及答案
编译原理试题及答案
试题:
1. 解释编译原理的定义,同时给出编译器的作用。
2. 简要描述编译过程中的四个基本步骤。
3. 解释词法分析器的功能和作用。
4. 解释语法分析器的功能和作用。
答案:
1. 编译原理是研究如何将高级语言程序转化为等价机器语言程序的一门学科。
编译器是将高级语言文本转换成等价的机器语言的软件工具。
它负责将源代码转化为目标代码,以便计算机能够理解和执行。
2. (1) 词法分析:将源代码分解成一系列单词或标记。
(2) 语法分析:根据语法规则组织单词或标记形成语法树。
(3) 语义分析:分析语法树以检测语义错误。
(4) 代码生成:根据语法树生成目标代码。
3. 词法分析器的功能是将源代码分解成一系列单词或标记。
它将源代码读取为字符流,然后将这些字符组成单词,同时可以去除空格、注释等不具有实际意义的内容。
词法分析器的作用是为语法分析器提供正确的单词序列,为后续的语义分析和代
码生成步骤建立基础。
4. 语法分析器的功能是根据语法规则组织单词或标记形成语法树。
它通过构建语法树来分析源代码的语法结构,同时可以检测语法错误。
语法分析器的作用是为后续的语义分析和代码生成步骤提供一个结构化的表示形式,便于后续的处理和转换。
编译原理题——简答题
编译原理A1.简要说明语义分析的基本功能。
2. 考虑文法 G[S]:S → (T) | a+S | aT → T,S | S消除文法的左递归及提取公共左因子。
3试为表达式 w+(a+b)*(c+d/(e-10)+8) 写出相应的逆波兰表示。
4. 按照三种基本控制结构文法将下面的语句翻译成四元式序列:while (A<C ∧ B<D){if (A ≥ 1) C=C+1;else while (A ≤ D)A=A+2;}。
5. 已知文法 G[S] 为S → aSb|Sb|b,试证明文法 G[S] 为二义文法。
A答案1答:语义分析的基本功能包括: 确定类型、类型检查、语义处理和某些静态语义检查。
2解:消除文法G[S]的左递归:S→(T) | a+S | aT→ST′T′→,ST′| ε提取公共左因子:S→(T) | aS′S′→+S | εT→ST′T′→,ST′| ε3答:w a b + c d e 10 - / + 8 + * +4答:该语句的四元式序列如下(其中E1、E2和E3分别对应A<C∧B<D、A≥1和A≤D,并且关系运算符优先级高):100 (j<,A,C,102)101 (j,_,_,113)102 (j<,B,D,104)103 (j,_,_,113)104 (j=,A,1,106)105 (j,_,_,108)106 (+, C, 1, C)107 (j,_,_,112)108 (j≤,A,D,110) 109 (j,_,_,112)110 (+, A, 2, A)111 (j,_,_,108)112 (j,_,_,100)1135答:证明:由文法G[S]:S→aSb|Sb|b,对句子aabbbb对应的两棵语法树为:因此,文法G[S]为二义文法。
编译原理B1.什么是句子?什么是语言 ?2. 写一文法,使其语言是偶正整数的集合,要求:(1)允许0打头;(2) 不允许0打头。
编译原理考试题
编译原理考试题
1. 编译器的作用是什么?简述编译器的基本工作流程。
2. 解释什么是词法分析。
描述词法分析器的基本工作原理。
3. 什么是语法分析?描述语法分析器的基本工作原理。
4. 解释语义分析的概念。
语义分析器的基本工作原理是什么?
5. 请简要解释编译器的前端和后端分别是做什么的。
6. 什么是中间代码?为什么编译器要生成中间代码?
7. 解释什么是符号表。
符号表在编译过程中起到什么作用?
8. 简述优化在编译过程中的作用。
列举并解释两种常见的优化技术。
9. 解释静态链接和动态链接的区别。
10. 请解释解释器和编译器之间的区别。
描述它们各自的工作
原理。
11. 解释冲突解析算法中的"移进-归约"冲突和"归约-归约"冲突。
12. 简述LL(1)文法和LR(1)文法的特点及区别。
13. 解释编程语言中的数据类型检查和类型推导的概念。
14. 简要描述语法制导翻译的概念和基本原理。
15. 请解释正则表达式和有限自动机之间的关系。
注意:以上为编译原理考试相关的问题,文中不含有标题相同的文字。
编译原理小题答案
《编译原理》常见题型一、填空题1.编译程序的工作过程一般可以划分为词法分析,语法分析,中间代码生成,代码优化(可省) ,目标代码生成等几个基本阶段。
2.若源程序是用高级语言编写的,目标程序是机器语言程序或汇编程序,则其翻译程序称为编译程序.3.编译方式与解释方式的根本区别在于是否生成目标代码 .5.对编译程序而言,输入数据是源程序,输出结果是目标程序 .7.若源程序是用高级语言编写的,目标程序是机器语言程序或汇编程序,则其翻译程序称为编译程序。
8.一个典型的编译程序中,不仅包括词法分析、语法分析、中间代码生成、代码优化、目标代码生成等五个部分,还应包括表格处理和出错处理。
其中,词法分析器用于识别单词。
10.一个上下文无关文法所含四个组成部分是一组终结符号、一组非终结符号、一个开始符号、一组产生式。
12.产生式是用于定义语法成分的一种书写规则。
13.设G[S]是给定文法,则由文法G所定义的语言L(G)可描述为:L(G)={x│S=>*x,x∈VT*}。
14.设G是一个给定的文法,S是文法的开始符号,如果S*⇒x(其中x∈V*),则称x是文法的一个句型。
15.设G是一个给定的文法,S是文法的开始符号,如果S*⇒x(其中x∈V T*),则称x是文法的一个句子。
16.扫描器的任务是从源程序中识别出一个个单词符号。
17.语法分析最常用的两类方法是自上而下和自下而上分析法。
18.语法分析的任务是识别给定的终结符串是否为给定文法的句子。
19.递归下降法不允许任一非终结符是直接左递归的。
20.自顶向下的语法分析方法的关键是如何选择候选式的问题。
21.递归下降分析法是自顶向下分析方法。
22.自顶向下的语法分析方法的基本思想是:从文法的开始符号开始,根据给定的输入串并按照文法的产生式一步一步的向下进行直接推导,试图推导出文法的句子,使之与给定的输入串匹配。
23.自底向上的语法分析方法的基本思想是:从给定的终结符串开始,根据文法的规则一步一步的向上进行直接归约,试图归约到文法的开始符号。
编译原理试题及答案
编译原理试题及答案一、选择题1. 编译器的主要功能是什么?A. 将高级语言代码翻译成机器语言代码B. 进行程序调试C. 进行代码优化D. 管理程序运行时的内存分配答案:A2. 词法分析器的主要任务是什么?A. 将源代码分解成多个语句B. 将源代码分解成多个词素C. 检查源代码的语法正确性D. 将词素转换为相应的语法单位答案:B3. 下列哪个是自顶向下的语法分析方法?A. LL(1)分析法B. LR(1)分析法C. LALR(1)分析法D. GLR分析法答案:A4. 语义分析的主要任务是什么?A. 检查程序的语法正确性B. 检查程序的类型正确性C. 将源代码转换为目标代码D. 进行程序的优化答案:B5. 代码生成阶段的主要任务是什么?A. 将语法树转换为目标代码B. 进行程序的优化C. 检查程序的类型正确性D. 将源代码分解成多个词素答案:A二、简答题1. 简述编译过程的主要阶段。
答案:编译过程主要分为四个阶段:词法分析、语法分析、语义分析和代码生成。
词法分析将源代码分解成词素,语法分析检查源代码的语法结构,语义分析检查源代码的语义正确性,代码生成将源代码转换为目标代码。
2. 什么是中间代码?它在编译过程中起到什么作用?答案:中间代码是一种介于源代码和目标代码之间的代码形式,它通常具有更接近于机器语言的特性,但仍然保持一定的抽象级别。
中间代码在编译过程中起到桥梁的作用,它使得代码优化和目标代码生成更加方便和高效。
三、论述题1. 论述编译器优化的几种常见方法。
答案:编译器优化主要包括以下几种方法:常量折叠、死代码消除、公共子表达式消除、循环优化、代码内联、寄存器分配等。
这些优化方法可以提高程序的执行效率,减少资源消耗,提高程序的运行速度。
结束语:本试题涵盖了编译原理的基本知识点,包括编译器的功能、编译过程的主要阶段、中间代码的作用以及编译器优化的方法。
希望考生能够通过本试题加深对编译原理的理解和掌握。
编译原理试题及答案
编译原理试题及答案1. 选择题(每题4分,共40分)1) 当编译器在词法分析阶段遇到无法识别的字符时,应该采取的动作是:A. 直接忽略该字符并继续进行词法分析B. 输出错误信息并终止词法分析过程C. 将该字符标记为非法字符并继续词法分析D. 转交给语法分析器进行处理答案:B2) 下列关于语法分析器的描述中,错误的是:A. 语法分析器使用文法规则将输入的记号流转化为推导树B. 语法分析器可以通过自上而下或自下而上的方式进行解析C. LL(1)文法是一种常用于自上而下语法分析的文法形式D. 语法分析器的输入是词法分析器输出的记号流答案:A3) 以下关于语法制导翻译的说法,正确的是:A. 语法制导翻译是在语义分析阶段完成的B. 语法制导翻译通过产生式的属性传递进行信息的传递和计算C. 语法制导翻译只能用于自上而下的语法分析D. 语法制导翻译是在语法分析阶段完成的答案:B4) 在SLR分析算法中,项目集簇的构造过程中需要进行的操作是:A. 闭包操作和移进操作B. 移进操作和规约操作C. 闭包操作和规约操作D. 闭包操作、移进操作和规约操作答案:D5) 下列关于中间代码生成的叙述中,错误的是:A. 中间代码是一种类似于汇编代码的表示形式B. 中间代码可以直接被目标代码生成器所使用C. 中间代码的生成可以采用三地址码的形式D. 中间代码的生成在语法分析和语义分析之后进行答案:B2. 简答题(每题10分,共30分)1) 请简要描述编译器的主要工作流程。
答案:编译器的主要工作流程包括词法分析、语法分析、语义分析、中间代码生成、优化和目标代码生成等阶段。
在词法分析阶段,编译器将输入的源代码转化为一个个记号流。
接下来,在语法分析阶段,编译器使用文法规则对记号流进行分析,并生成语法树或推导树。
在语义分析阶段,编译器对语法树进行语义检查,并进行类型推导和符号表管理等操作。
中间代码生成阶段将经过语义分析的源代码转化为一种中间表示形式,通常是三地址码。
编译原理题库——简答题
G(S):A→2∣4∣6∣8∣D
B→A∣0
C→CB∣A
D→1∣3∣5∣7∣9
S→CD∣D
8解:
(1)最左推导为:
E => E+T => T+T => F+T => i+T => i+T*F => i+F*F => i+i*F => i+i*i
E => T => T*F => F*F => i*F => i*(E) => i*(E+ T) => i*(T+ T)
即有(L(A)∪L(B))*=L((A*B*))* ③
111 (j,_,_,108)
112 (j,_,_,100)
113
5答:证明:
由文法G[S]:S→aSb|Sb|b,对句子aabbbb对应的两棵语法树为:
因此,文法G[S]为二义文法。
编译原理B
1.什么是句子? 什么是语言 ?
2. 写一文法,使其语言是偶正整数的集合,要求:
(1)允许0打头;
(2) 不允许0打头。
P:
S->PD|D
P->NP|N
D->0|2|4|6|8
N->0|1|2|3|4|5|6|7|8|9
(2)G[S]=({S,P,R,D,N,Q },{0,1,2,…,9},P,S)
P:
S->PD|P0|D
P->NR|N
R->QR|Q
D->2|4|6|8
N->1|2|3|4|5|6|7|8|9
Q->0|1|2|3|4|5|6|7|8|9
编译简答题
2-19什么是句子? 什么是语言?
答:设G是一个给定的文法,S是文法的开始符号,如果Sx(其中x∈VT*),则称x是文法的一个句子。
设G[S]是给定文法,则由文法G所定义的语言L(G)可描述为: L(G)={x│Sx,x∈VT*} 。
2-20.已知文法G[E]为:
E→T|E+T|E-T
3-04.试给出非确定自动机的定义。
答:一个非确定的有穷自动机(NFA)M是一个五元组:M=(K,Σ,f,S ,Z)。
其中:
1. K是一个有穷集,它的每个元素称为一个状态;
2. Σ是一个有穷字母表,它的每个元素称为一个输入符号,所以也称Σ为输入符号表;
3. f是状态转换函数,是在K×Σ→K的子集的映射,即,f: K×Σ→2K ;表明在某状态下对于某输入符号可能有多个后继状态;
解:根据题义,可知aR 为a之逆的含义就是句子中的符号a、b以d为中心呈左右对称出现;由于a∈(a,b)*,所以a、b的个数可以为零。所以可构造产生此语言的上下文无关文法G[S]为:S→aSa|bSb|d
2-23.证明下面文法G[N]是二义性文法。
G[N]: N →SE∣E
因此说明此文法有二义性。
3-03.简述DFA与NFA有何区别 ?
答:DFA与NFA的区别表现为两个方面:一是NFA可以若干个开始状态,而DFA仅只一个开始状态。另一方面,DFA的映象M是从K×∑到K,而NFA的映象M是从K×∑到K的子集,即映象M将产生一个状态集合(可能为空集),而不是单个状态。
S →SD∣D
E →0∣2∣10
D →0∣1∣2
答:10是文法G[N]的一个句子,并且有两个不同的最右推导。
编译原理_简答题.docx
名词解释题:Display表:嵌套层次显示表由于过程嵌套允许内层过程引用外层过程定义的数据,因此,当一个过程运行时必须跟踪它的所有外层过程的最新活动记录起始地址, display 表就是用于登记每个外层过程的最新活动记录起始地址。
LL(1) 文法若文法的任何两个产生式 A ? ? | ?都满足下面两个条件:(1) FIRST(? ) ? FIRST(? ) = ?;(2)若 ? ?* ? ,那么 FIRST(? ) ? FOLLOW( A ) = ?。
我们把满足这两个条件的文法叫做 LL(1) 文法,其中的第一个 L 代表从左向右扫描输入,第二个 L 表示产生最左推导, 1 代表在决定分析器的每步动作时向前看一个输入符号。
除了没有公共左因子外, LL(1) 文法还有一些明显的性质,它不是二义的,也不含左递归。
LR(0) 分析器所谓 LR(0) 分析,是指从左至右扫描和自底向上的语法分析,且在分析的每一步,只须根据分析栈当前已移进和归约出的全部文法符号,并至多再向前查看0 个输入符号,就能确定相对于某一产生式左部符号的句柄是否已在分析栈的顶部形成,从而也就可以确定当前所应采取的分析动作( 是移进还是按某一产生式进行归约等) 。
编译程序大致有哪几种开发技术答案:(1)自编译( 2)交叉编译( 3)自展( 4)移植:编译程序的工作分为那几个阶段答:词法分析、语法分析和语义分析是对源程序进行的分析( 称为编译程序的前端),而中间代码生成、代码优化和代码生成三个阶段合称为对源程序进行综合( 称为编译程序的后端) ,它们从源程序的中间表示建立起和源程序等价的目标程序。
编译程序的实现应考虑的问题有那些答案:编译程序的实现应考虑:开发周期、目标程序的效率、可移植性、可调试性、可维护性、可扩充性等。
编译程序和高级语言有什么区别答:用汇编语言或高级语言编写的程序,必须先送入计算机,经过转换成用机器语言表示的目标程序(这个过程即编译),才能由计算机执行。
编译原理复习题(含试卷)
*编译原理复习题一.简答题:1) 什么是句子? 什么是语言?解答:句子——设G 是一个给定的文法,S 是文法的开始符号,如果S x (其中x ∈V T *),则称x 是文法的一个句子。
语言——语言是句子的集合。
或——设G[S]是给定文法,则由文法G 所定义的语言L(G)可描述为:L(G)={x │Sx,x ∈V T *} 。
2) DFA 与NFA 有何区别 ?解答:DFA 与NFA 的区别表现为两个方面:一是NFA 可以有若干个开始状态,而DFA 仅只有一个开始状态。
另一方面,DFA 的映象M 是从K ×∑到K ,而NFA 的映象M 是从K ×∑到K 的子集,即映象M 将产生一个状态集合(可能为空集),而不是单个状态。
3) 自顶向下的语法分析方法的基本思想是什么?解答:从文法的开始符号开始,根据给定的输入串并按照文法的产生式一步一步的向下进行直接推导,试图推导出文法的句子,使之与给定的输入串匹配。
4) 自底向上的语法分析方法的基本思想是什么?解答:从给定的输入串(终结符串)开始,根据文法的规则一步一步的向上进行直接归约,试图归约到文法的开始符号。
5) 一个上下文无关文法G 包括哪四个组成部分?解答:一组非终结符号,一组终结符号,一个开始符号,以及一组产生式。
6) 在自底向上的语法分析方法中,分析的关键是什么?解答:关键是寻找句柄。
7)在自顶向下的语法分析方法中,分析的关键是什么?解答:关键是选择候选式。
8)什么是属性文法?答:是在上下文无关文法的基础上,为每个文法符号(含终结符和非终结符)配备若干个属性值,对文法的每个产生式都配备了一组属性计算规则(称为语义规则)。
在语法分析过程中,完成语义规则所描述的动作,从而实现语义处理。
一个属性文法形式的定义为一个三元组AG,AG=(G,V,E)。
其中G为一个上下文无关文法;V为属性的有穷集;E为一组语义规则。
9)语法制导翻译语法制导翻译:定义翻译所必须的语义属性和语义规则,一般不涉及计算顺序。
《编译原理》考试试题及答案(汇总)
《编译原理》考试试题及答案(汇总)一、是非题(请在括号内,正确的划√,错误的划×)(每个2分,共20分)1.编译程序是对高级语言程序的解释执行。
(×)2.一个有限状态自动机中,有且仅有一个唯一的终态。
(×)3.一个算符优先文法可能不存在算符优先函数与之对应。
(√ )4.语法分析时必须先消除文法中的左递归。
(×)5.LR分析法在自左至右扫描输入串时就能发现错误,但不能准确地指出出错地点. (√)6.逆波兰表示法表示表达式时无须使用括号。
(√ )7.静态数组的存储空间可以在编译时确定。
(×)8.进行代码优化时应着重考虑循环的代码优化,这对提高目标代码的效率将起更大作用。
(×) 9.两个正规集相等的必要条件是他们对应的正规式等价。
(× )10.一个语义子程序描述了一个文法所对应的翻译工作. (×)二、选择题(请在前括号内选择最确切的一项作为答案划一个勾,多划按错论)(每个4分,共40分)1.词法分析器的输出结果是_____.A.()单词的种别编码B.()单词在符号表中的位置C.() 单词的种别编码和自身值D.( )单词自身值2.正规式M 1 和M 2 等价是指_____。
A.() M1和M2的状态数相等B.()M1和M2的有向边条数相等C.( ) M1和M2所识别的语言集相等D.( )M1和M2状态数和有向边条数相等3.文法G:S→xSx|y所识别的语言是_____.A.( )xyx B.() (xyx)*C.( ) xnyxn(n≥0)D.( )x*yx*4.如果文法G是无二义的,则它的任何句子α_____。
A.( )最左推导和最右推导对应的语法树必定相同B.( )最左推导和最右推导对应的语法树可能不同C.() 最左推导和最右推导必定相同D.( )可能存在两个不同的最左推导,但它们对应的语法树相同5.构造编译程序应掌握______。
编译原理简答题
1、简述典型编译程序在各个工作阶段所完成的任务词法分析:对构成源程序的字符串进行扫描和分解,识别出一个个具有独立意义的单词。
语法分析:根据语言的语法规则对单词符号串(符号序列)进行语法分析,识别出各类语法短语(可表示成语法树的语法单位),判断输入串在语法上是否正确语义分析:按语义规则对语法分析得到的语法单位进行语义分析,审查源程序有无语义错误,为代码生成阶段收集类型信息,并进行类型审查金和违背语言规范的报错处理中间代码生成:将语义分析得到的源程序变成一种结构简单、含义明确、容易生成、容易翻译成目标代码的内在代码形式代码优化:对中间代码或目标代码进行变换改造等优化处理,使生成的代码更高效目标代码生成:将中间代码变换成特定目标机器上的绝对指令代码或可重定向的指令代码或汇编指令代码2、mian(){ int x=10,y;}保留字:main 界符:(、)、{ 保留字:int 标识符:x 运算符:=常数:10 标识符:y 界符:;、}3、文法、句型、句子和语言的形式定义(注意下标)文法G定义为四元组(VN,VT,P,S)VN :非终结符(语法实体、变量)集。
VT :终结符集。
P:规则(α→β)集合,α∈(VN∪VT)*且至少包含一个非终结符,β∈(VN∪VT)* 。
S:开始符(识别符),它是一个非终结符,至少要在一条规则中作为左部出现设G[S]是一文法,如果符号串x是从文法的识别符号推导出来的,既有Sx,则称x是文法G[S]的句型。
若符号串x还满足仅由终结符号组成的条件,既Sx(其中x∈VT*)则称x为G[S]的句子。
语言:文法G[S]的语言是G[S]的所有句子构成的集合。
即L(G)={x|Sx,且x∈VT* }4、确定的有穷自动机(DFA)和不确定的有穷自动机(NFA)的五元组定义确定的有穷自动机(DFA)(1) K是一有穷状态集;(2) ?是一有穷字母表,称输入符号字母表;(3) f是转换函数,是在K??→K上的映射。
编译原理题库——简答题
11、给出下面语言的相应文法:
L1={anbnci∣n≥1,i≥0},
L2={aibncn∣n≥1,i≥0}
L3={anbnambm∣n,m≥0}
L4={1n0m1m0n∣n,m≥0}
3解:标识符是高级语言中定义的字符串,一般是以英文字母(包括大小写字母)或下划线开头的,由数字、字母和下划线组成的一定长度的字符串,它只是一个标志,没有其他含义。名字是用标识符表示的,但名字不仅仅是一个字符串,它还具有属性和值。
句柄是id。
编译原理D卷
3、何谓“标识符”,何谓“名字”,两者的区别是什么?
4、令 +、* 和↑代表加、乘和乘幂,按如下的非标准优先级和结合性质的约定,计算1+1*2↑*1↑2的值:
(1)、优先顺序(从高至低)为+、* 和↑,同级优先采用左结合。
(2)、优先顺序为↑、+、*,同级优先采用右结合。
6、令文法G6为N→D∣ND,D→0∣1∣2∣3∣4∣5∣6∣7∣8∣9
又L(A) L(A)∪L(B), L(B) L(A)∪L(B)
故:L(A)* (L(A)∪L(B))*
L(B)* (L(A)∪L(B))*
因此有:L(A)*L(B)* (L(A)∪L(B))* (L(A)∪L(B))*=( (L(A)∪L(B))*)2
故(L(A)*L(B)*)* ((L(A)∪L(B))*)*
三元式序列:①(*,b,c)②(+,a,①)③(+,a,b)④(/,②,③)⑤(-,④,d)
编译原理C
1.(10分) 对下列错误信息,请指出可能是编译的哪个阶段(词法分析、语法分析、语义分析、代码生成)报告的。
(1)else没有匹配的if
(2)数组下标越界
编译原理_简答题
对循环的优化有三种:循环不变表达式外提、归纳变量删除与计算强
度削减。
对下列错误信息,请指出可能是编译的哪个阶段(词法分析、语法分析、语义分析、
代码生成)报告的。
(1)else没有匹配的if
(2)数组下标越界
(3)使用的函数没有定义
(4)在数中出现非数字字符
止。用解释型编译程序,执行速度很慢,但可以进行人和计算机的"对话",随时
可以修改高级语言的程序。BASIC语言就是解释型高级语言。编译型编译程序将
级语言编写的程序,一次就会部翻译成机器语言表示的程序,而且过程进行很快,
在过程中,不能进行人机对话修改。FORTRAN语言就是编译型高级语言。
编译过程中可进行的优化如何分类?
答案:
翻译程序是指将用某种语言编写的程序转换成另一种语言形式的程序的程序,如编译程
序和汇编程序等。
编译程序是把用高级语言编写的源程序转换(加工)成与之等价的另一种用低级语言编
写的目标程序的翻译程序。
解释程序是解释、执行高级语言源程序的程序。
划分程序的基本块时,确定基本块的入口语句的条件是什么?
答:程序第一个语句,或能由条件转移语句或无条件转移语句转移到的语句,或紧跟在条件转移语句后面的语句。
计算机执行用高级语言编写的程序有哪些途径?它们之间的主要区别是什么?
答案:
计算机执行用高级语言编写的程序主要途径有两种,即解释与编译。
像Basic之类的语言,属于解释型的高级语言。它们的特点是计算机并不事先对高级语言进行全盘翻译,将其变为机器代码,而是每读入一条高级语句,就用解释器将其翻译为一条机器代码,予以执行,然后再读入下一条高级语句,翻译为机器代码,再执行,如此反复。总而言之,是边翻译边执行。
编译原理简答
1、给出算符优先文法的定义,算符优先表是否都存在对应的优先函数?给出优先函数的定义。
设有一不含ε产生式的算符文法G,如果对任意两个终结符对a,b之间至多只有、和h三种关系的一种成立,则称G一个算符优先文法。
算符优先关系表不一定存在对应的优先函数优先函数为文法字汇表中2、考虑文法G[T]:T→T*F|FF→F↑P|PP→(T)|i证明T*P↑(T*F)是该文法的一个句型,并指出直接短语和句柄。
首先构造T*P↑(T*F)的语法树如图所示。
句型T*P↑(T*F)的语法树由图可知,T*P↑(T*F)是文法G[T]的一个句型。
直接短语有两个,即P和T*F;句柄为P。
3、文法G[S]为:S→SdT | TT→T<G | GG→(S) | a试给出句型(SdG)<a的短语、简单(直接)短语、句柄和最左素短语。
句型(SdG)<a的短语:(SdG)<a 、(SdG)、SdG 、G 、a简单(直接)短语:G 、a句柄:G最左素短语:SdG4、目标代码有哪几种形式?生成目标代码时通常应考虑哪几个问题?三种形式:可立刻执行的机器语言代码;汇编语言程序;待装配的机器语言代码模块考虑的问题包括:每一个语法成分的语义;目标代码中需要哪些信息,怎样截取这些信息。
5、符号表的作用是什么?符号表的查找的整理技术有哪几种?作用:登记源程序中出现的各种名字及其信息,以及编译各阶段的进展状况。
主要技术:线性表,对折查找与二叉树,杂凑技术。
1、实现高级语言程序的途径有哪几种?它们之间的区别?计算机执行用于高级语言编写的程序主要有两种途径:解释和编译。
在解释方式下,翻译程序并不对高级语言进行彻底的翻译,而是读入一条语句,就解释其含义并执行,然后再读入下一条语句,再执行。
在编译方式下,翻译程序先对高级语言进行彻底的翻译并生成目标代码,然后再对目标代码进行优化,即对源程序的处理是先翻译后执行。
从速度上看,编译方式下,源程序的执行比解释方式下快,但在解释方式下,有利于程序的调试。
编译原理 简答题
简答题1.什么是上、下文无关文法?它是由几部分组成的?答:上、下文无关文法所定义的语法范畴,是完全独立于这种范畴可能出现的环境的。
它由四部分组成:一组终结符号,一组非终结符号,一个开始符号和一组产生式。
2.简述正规式和有限自动机的关系。
答:上的非确定有限自动机M所能识别字的全体L(M)是上的一个正规集。
对于上的每个正规集V,存在一个上的确定有限自动机M,使得V=L(M)。
3.简述NFA和DFA的区别。
答:①DFA初态是唯一的,NFA可以有多个初态。
②DNF是单值函数,NFA是多值函数。
③DFA每个弧线用中一个不同输入字符做标记,而NFA每条弧用中的一个字做标记。
4.何为递归下降分析法。
答:在不含左递归和每个非终结符的所有的首符集都两两不想交的条件下。
我们就可以构造一个不带回溯的的自上而下的分析程序。
该程序是由一组递归过程组成的。
每个过程对应文法的一个非终结符。
这种语法分析的方法称为文法递归下降分析法。
5.什么叫做递归下降分析器?答:当一个文法满足 LL(1)条件时,我们就可以为它构造一个不带回溯的自上而下分析程序,这个分析程序是由一组递归过程组成的,每个过程对应文法的一个非终结符,这样的一个分析程序称为递归下降分析器。
6.语法分析方法如何分类,它们面对的主要问题是什么?答:语法分析方法分为自下而上的分析法和自上而下的分析法。
自上而下分析法的主要问题是:消除文法的左递归以及由文法开始符号出发推导句子的过程中如何避免回溯。
自下而上分析法的主要问题是:在由输入串出发向文法的开始符号规约的过程中。
如何确定可规约子串。
7.何为中间语言,简述它的作用。
答:中间语言是一种面向语法。
其复杂性介于用高级语言书写的源程序和用机器语言表示的目标程序之间。
是一种易于翻译成目标代码的代码形式。
它的作用在于利用它作为中间环节。
不仅可以较快的实现源程序的翻译过程而且可以在此基础上应用优化方法将源程序翻译成运行时间短,占用内存少的目标程序。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
答案:
1.删除多余运算
2.代码外提
3.强度削弱
4.变换循环控制条件
5.合并已知量与复写传播
6.删除无用赋值
答案:
依据优化所涉及的程序范围,可以分为:局部优化、循环优化和全局优化。
词法分析
词法分析的主要任务是从左向右扫描每行源程序的符号,按照词法规则
从构成源程序的字符串中识别出一个个具有独立意义的最小语法单位,
并转换成统一的内部表示(token),送给语法分析程序。
从优化的范围的角度,优化可以分哪两类对循环的优化可以有哪三种
像C,Pascal之类的语言,属于编译型的高级语言。它们的特点是计算机事先对高级语言进行全盘翻译,将其全部变为机器代码,再统一执行,即先翻译,后执行。从速度上看,编译型的高级语言比解释型的高级语言更快。
寄存器分配的原则是什么
答案:
寄存器分配的原则是:
(1)当生成某变量的目标代码时,尽量让变量的值或计算结果保留在寄存器中,直到寄
编译程序大致有哪几种开发技术
答案:
(1)自编译(2)交叉编译 (3)自展 (4)移植:
编译程序的工作分为那几个阶段
答:词法分析、语法分析和语义分析是对源程序进行的分析(称为编译程序的前端),而中间代码生成、代码优化和代码生成三个阶段合称为对源程序进行综合(称为
编译程序的后端),它们从源程序的中间表示建立起和源程序等价的目标程序。
答案:
(1)语法分析
(2)语义分析
(3)语法分析
(4)词法分析
何谓代码优化进行优化所需要的基础是什么
答案:
对代码进行等价变换,使得变换后的代码运行结果与变换前代码运行结果相同,而运行
速度加快或占用存储空间减少,或两者都有。优化所需要的基础是在中间代码生成之后或目标代码生成之后。
何谓翻译程序、编译程序和解释程序
编译程序的实现应考虑的问题有那些
答案:
编译程序的实现应考虑:开发周期、目标程序的效率、可移植性、可调试性、可维护
性、可扩充性等。
编译程序和高级语言有什么区别
答:用汇编语言或高级语言编写的程序,必须先送入计算机,经过转换成用机器
语言表示的目标程序(这个过程即பைடு நூலகம்译),才能由计算机执行。执行转换过程
的程序叫编译程序。汇编程序是指没有编译过的汇编语言源文件。编译程序转
存器的利用效率。
简述编译程序的工作过程。
答:编译程序的工作过程,是指从输入源程序开始到输出目标程序为止的整个过程,是非常复杂的,就其过程而言,一般可以划分为五个工作阶段:①词法分析,对构成源程序的字符串进行扫描和分解,识别出一个个的单词;②语法分析,根据语言的语法规则,把单词符号串分解成各类语法单位;③语义分析与中间代码产生,即对各类语法单位,分析其汉一并进行初步翻译;④代码优化,以期产生更高效的代码;⑤目标代码生成,把中间代码变换成特定机器上的低级语言指令形式。
答案:
翻译程序是指将用某种语言编写的程序转换成另一种语言形式的程序的程序,如编译程
序和汇编程序等。
编译程序是把用高级语言编写的源程序转换(加工)成与之等价的另一种用低级语言编
写的目标程序的翻译程序。
解释程序是解释、执行高级语言源程序的程序。
划分程序的基本块时,确定基本块的入口语句的条件是什么
答:程序第一个语句,或能由条件转移语句或无条件转移语句转移到的语句,或紧跟在条件转移语句后面的语句。
LR(0)分析器
所谓LR(0)分析,是指从左至右扫描和自底向上的语法分析,且在分析的每一步,只须根据分析栈当前已移进和归约出的全部文法符号,并至多再向前查看0个输入符号,就能确定相对于某一产生式左部符号的句柄是否已在分析栈的顶部形成,从而也就可以确定当前所应采取的分析动作(是移进还是按某一产生式进行归约等)。
为什么在代码生成时要考虑充分利用寄存器
答案:
因为当变量值存在寄存器时,引用的变量值可直接从寄存器中取,减少对内存的存取次数,这样便可提高运行速度。因此如何充分利用寄存器是提高目标代码运行效率的重要途径。
一个典型的编译程序通常由哪些部分组成各部分的主要功能是什么
答案:
一个典型的编译程序通常包含8个组成部分,它们是词法分析程序、语法分析程序、语
什么是句柄什么是素短语
一个句型的最左直接短语称为该句型的句柄。(3分)素短语是这样的一个短语,它至少包含一个终结符并且不包含更小的素短语。(3分)
什么是语法制导翻译中间代码通常有哪几种主要形式
答案:
由一个源语言、一个目标语言和一组翻译规则组成,遮住规则可将任何源语言符号串翻译成对应的目标语言。
主要形式: 三元式、 四元式 、逆波兰式
(2)若*,那么FIRST( ) FOLLOW( A ) =。
我们把满足这两个条件的文法叫做LL(1)文法,其中的第一个L代表从左
向右扫描输入,第二个L表示产生最左推导,1代表在决定分析器的每步
动作时向前看一个输入符号。除了没有公共左因子外,LL(1)文法还有一
些明显的性质,它不是二义的,也不含左递归。
开始符号;或者说从语法树的末端开始,步步向上“归约”,直到根节点。
决定目标代码的因素有哪些
答案:
决定目标代码的因素主要取决于具体的机器结构、指令格式、字长及寄存器的个数和种
类,并与指令的语义和所用操作系统、存储管理等都密切相关。又由于目标代码的执行效率
在很大程度上依赖于寄存器的使用,所以目标代码与寄存器的分配算法也有关。
答:从优化的范围的角度,优化可以分为局部优化和全局优化两类;
对循环的优化有三种:循环不变表达式外提、归纳变量删除与计算强
度削减。
对下列错误信息,请指出可能是编译的哪个阶段(词法分析、语法分析、语义分析、
代码生成)报告的。
(1)else没有匹配的if
(2)数组下标越界
(3)使用的函数没有定义
(4)在数中出现非数字字符
名词解释题:
Display表: 嵌套层次显示表
由于过程嵌套允许内层过程引用外层过程定义的数据,因此,当一个过程运行时必须跟踪它的所有外层过程的最新活动记录起始地址, display表就是用于登记每个外层过程的最新活动记录起始地址。
LL(1)文法
若文法的任何两个产生式A |都满足下面两个条件:
(1)FIRST( ) FIRST( ) =;
止。用解释型编译程序,执行速度很慢,但可以进行人和计算机的"对话",随时
可以修改高级语言的程序。BASIC语言就是解释型高级语言。编译型编译程序将
级语言编写的程序,一次就会部翻译成机器语言表示的程序,而且过程进行很快,
在过程中,不能进行人机对话修改。FORTRAN语言就是编译型高级语言。
编译过程中可进行的优化如何分类
义分析程序、中间代码生成程序、中间代码优化程序、目标代码生成程序、表格管理程序和
错误处理程序。
语法分析的主要任务是什么常分为哪二类方法
答案:
任务是在词法分析的基础上将单词序列组合成各类语法短语.
常分为:自顶而下,自底而上二类方法。
运行时的DISPLAY表的内容是什么它的作用是什么
答:DISPLAY表是嵌套层次显示表。每当进入一个过程后,在建立它的活动记录区的同时建立一张嵌套层次显示表diaplay.假定现在进入的过程层次为i,则它的diaplay表含有i+1个单元,自顶向下每个单元依次存放着现行层、直接外层、…、直至最外层(主程序,0层)等每层过程的最新活动记录的起始地址。通过DISPLAY表可以访问其外层过程的变量。
换过的叫目标程序,也就是机器语言。
编译程序的工作情况有三种:汇编型、解释型和编译型。汇编型编译程序用来
将汇编语言编写的程序,按照一一对应的关系,转换成用机器语言表示的程序。
解释型编译程序将高级语言程序的一个语句,先解释成为一组机器语言的指令,
然后立即执行,执行完了,取下一组语句解释和执行,如此继续到完成一个程序
简述代码优化的目的和意义。
答:代码优化是尽量生成“好”的代码的编译阶段。也就是要对程序代码进行一种等价变换,在保证变换前后代码执行结果相同的前提下,尽量使目标程序运行时所需要的时间短,同时所占用的存储空间少。
简述自下而上的分析方法。
所谓自下而上分析法就是从输入串开始,逐步进行“归约”,直至归约到文法的
计算机执行用高级语言编写的程序有哪些途径它们之间的主要区别是什么
答案:
计算机执行用高级语言编写的程序主要途径有两种,即解释与编译。
像Basic之类的语言,属于解释型的高级语言。它们的特点是计算机并不事先对高级语言进行全盘翻译,将其变为机器代码,而是每读入一条高级语句,就用解释器将其翻译为一条机器代码,予以执行,然后再读入下一条高级语句,翻译为机器代码,再执行,如此反复。总而言之,是边翻译边执行。
存器不够分配时为止。
(2)当到基本块出口时,将变量的值存放在内存中,因为一个基本块可能有多个后继结
点或多个前驱结点,同一个变量名在不同前驱结点的基本块内出口前存放的寄存器可能不同,或没有定值,所以应在出口前把寄存器的内容放在内存中,这样从基本块外入口的变量值都在内存中。
(3)对于在一个基本块内后边不再被引用的变量所占用的寄存器应尽早释放,以提高寄