清华大学1997年研究生入学考试 编译原理试题(共50分)
- 格式:doc
- 大小:46.50 KB
- 文档页数:5
编译原理试题参考答案编译原理试题参考答案编译原理是计算机科学中的一门重要课程,它研究的是将高级语言源代码转换成机器语言的过程。
在学习编译原理的过程中,试题是一种常见的考核方式。
下面是一些编译原理试题的参考答案,希望对大家的学习有所帮助。
1. 什么是编译器?编译器是一种将高级语言源代码转换成机器语言的程序。
它包括了词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等多个阶段。
编译器的主要作用是将高级语言源代码转换成可执行的机器语言程序。
2. 什么是词法分析?词法分析是编译器的第一个阶段,它将源代码分解成一个个的词法单元,比如关键字、标识符、常量和运算符等。
词法分析器通常使用有限自动机来实现,它可以根据事先定义好的词法规则来识别源代码中的词法单元。
3. 什么是语法分析?语法分析是编译器的第二个阶段,它将词法分析得到的词法单元组织成一个语法树。
语法分析器通常使用上下文无关文法来描述语法规则,并通过递归下降、LL(1)分析或LR分析等算法来进行语法分析。
4. 什么是语义分析?语义分析是编译器的第三个阶段,它对语法树进行语义检查和语义规则的处理。
语义分析器通常会进行类型检查、符号表管理和语义规则的处理,以确保源代码的语义正确性。
5. 什么是中间代码生成?中间代码生成是编译器的第四个阶段,它将语法树转换成一种中间表示形式,比如三地址码、虚拟机代码或抽象语法树。
中间代码是一种与具体机器无关的表示形式,它方便后续的代码优化和目标代码生成。
6. 什么是代码优化?代码优化是编译器的第五个阶段,它通过对中间代码的分析和变换,来改进程序的执行效率和资源利用率。
代码优化的目标是在保持程序语义不变的前提下,尽可能地减少程序的执行时间和资源消耗。
7. 什么是目标代码生成?目标代码生成是编译器的最后一个阶段,它将中间代码转换成目标机器的机器语言程序。
目标代码生成器通常会进行寄存器分配、指令选择和指令调度等操作,以生成高效的目标代码。
《编译原理》考试试题及答案(附录)一、判断题:1.一个上下文无关文法的开始符,可以是终结符或非终结符。
( X )2.一个句型的直接短语是唯一的。
( X )3.已经证明文法的二义性是可判定的。
( X )4.每个基本块可用一个DAG表示。
(√)5.每个过程的活动记录的体积在编译时可静态确定。
(√)6.2型文法一定是3型文法。
( x )7.一个句型一定句子。
( X )8.算符优先分析法每次都是对句柄进行归约。
(应是最左素短语) ( X )9.采用三元式实现三地址代码时,不利于对中间代码进行优化。
(√)10.编译过程中,语法分析器的任务是分析单词是怎样构成的。
( x )11.一个优先表一定存在相应的优先函数。
( x )12.目标代码生成时,应考虑如何充分利用计算机的寄存器的问题。
( )13.递归下降分析法是一种自下而上分析法。
( )14.并不是每个文法都能改写成LL(1)文法。
( )15.每个基本块只有一个入口和一个出口。
( )16.一个LL(1)文法一定是无二义的。
( )17.逆波兰法表示的表达试亦称前缀式。
( )18.目标代码生成时,应考虑如何充分利用计算机的寄存器的问题。
( )19.正规文法产生的语言都可以用上下文无关文法来描述。
( )20.一个优先表一定存在相应的优先函数。
( )21.3型文法一定是2型文法。
( )22.如果一个文法存在某个句子对应两棵不同的语法树,则文法是二义性的。
( )二、填空题:1.( 最右推导 )称为规范推导。
2.编译过程可分为(词法分析),(语法分析),(语义分析和中间代码生成),(代码优化)和(目标代码生成)五个阶段。
3.如果一个文法存在某个句子对应两棵不同的语法树,则称这个文法是()。
4.从功能上说,程序语言的语句大体可分为()语句和()语句两大类。
5.语法分析器的输入是(),其输出是()。
6.扫描器的任务是从()中识别出一个个()。
清华大学1997硕士入学编译原理试题清华大学1997年研究生入学考试编译原理试题(共50分)1.(8分)已知正规式(1)((a|b)* |aa)*b和正规式(2)(a|b)*b,试用有限自动机的等价性证明正规式(1)和(2)是等价的,给出相应的正规文法。
2.(8分)已知文法G [A ]为:A→aABl|aB→Bb|d① 试给出与G[A]等价的LL(1)文法G[A]② 构造G'[A]的预测分析表给出输入串aade#的分析过程。
3.(8分)有文法G[S]为:S→a|b|(A)A→SdA|S完成下列算符优先关系表,并判断G[S]是否为算符优先文法。
G[S]的算符优先关系表表1 算符优先关系表① 给出句型(sdsds)的短语,简单短语句柄,素短语和最大素短语。
② 给出输入串(adb)#的分析过程。
4. (8分)已知文法G[S]为:S→aAd|;Bd|aB↑|;A↑A→aB→a① 试判断G[S]是否为LALR(1)文法② 当一个文法是LR(1)而不是LALR(1)时,那么LR(1)项目集的同心集合并后会出现哪几种冲突,请说明理由。
5.(6分)试对下面基本块进行优化① 应用DAG对该基本块进行优化,给出优化后的语句序列。
② 给出当只有L在基本块出口后为活跃时的优化结果。
基本块为:X=B*CY=B/CZ=X+YW=9*Z6.(6分)已知文法G[S]为:S→dABA→aA|aB→Bb|ε① 试向G[S]是否为正规文法,为什么?② G[S]新产生的语言是什么?G[S]能否改写为等价的正规文法?7.(6分)某语言允许过程嵌套定义和逆归调用(如PACAL语言),若在栈式动态存分配中采用嵌套层次显示表Display解决对非局部变量的引用问题,试给出下列程序执行到语句“b:=10;”时运行栈及Display 表的示意图。
var x, y;procedurc p;var a;procedure q;var b;begin(q)b : =10;end (q);procedure s;var c,d;procedure r;var e, f;begin (r)call q;edn (r);begin (s)call r;end (s);begin (p)call s;end (p);begin (main)call p;end (main).。
1997年编译原理试题1.(10分)某操作系统下合法的文件名为device:name.extension其中第一部分(device:)和第三部分(.extension)可缺省,若device, name和extension都是字母串,长度不限,但至少为1,画出识别这种文件名的确定有限自动机。
2.(20分)a. 下面的二义文法描述命题演算公式,为它写一个等价的非二义文法。
S—> S and S | S or S | not S | p | q | (S)b. 下面文法是否为LL(1)文法?说明理由。
S—> A B | P Q x A—> x y B—> b cP—> d P | εQ—> a Q | ε3.(10分)某些语言允许给出名字表的一个属性表,也允许声明嵌在另一个声明里面,下面文法抽象这个问题。
D —> attrlist namelist | attrlist (D)namelist —> id, namelist | idattrlist —> A attrlist | AA —> decimal | fixed | float | realD —> attrlist namelist的含义是:在namelist中的任何名字有attrlist 中给出的所有属性。
D—> attrlist (D) 的含义是:在括号中的声明提到的所有名字有attrlist 中给出的所有属性,而不管声明嵌套多少层。
写一个翻译方案,它将每个名字的属性个数填入符号表。
为简单起见,若属性重复出现,则重复计数。
4.(10分)把表达式-(a+b)*(c+d)+(a+b+c)翻译成四元式。
5.(10分)由于文法二义引起的LR(1)分析动作冲突,可以依据消除二义的规则而得到LR(1)分析表,根据此表可以正确识别输入串是否为相应语言的句子。
对于非二义非LR(1)文法引起的LR(1)分析动作的冲突,是否也可以依据什么规则来消除LR(1)分析动作的冲突而得到LR(1)分析表,并且根据此表识别相应语言的句子?若可以,你是否可以给出这样的规则?6.(5分)UNIX 下的C编译命令cc的选择项g和O的解释如下,其中dbx 的解释是“dbx is an utility for source-level debugging and execution of programs written in C”。
编译原理考试题
1. 编译器的作用是什么?简述编译器的基本工作流程。
2. 解释什么是词法分析。
描述词法分析器的基本工作原理。
3. 什么是语法分析?描述语法分析器的基本工作原理。
4. 解释语义分析的概念。
语义分析器的基本工作原理是什么?
5. 请简要解释编译器的前端和后端分别是做什么的。
6. 什么是中间代码?为什么编译器要生成中间代码?
7. 解释什么是符号表。
符号表在编译过程中起到什么作用?
8. 简述优化在编译过程中的作用。
列举并解释两种常见的优化技术。
9. 解释静态链接和动态链接的区别。
10. 请解释解释器和编译器之间的区别。
描述它们各自的工作
原理。
11. 解释冲突解析算法中的"移进-归约"冲突和"归约-归约"冲突。
12. 简述LL(1)文法和LR(1)文法的特点及区别。
13. 解释编程语言中的数据类型检查和类型推导的概念。
14. 简要描述语法制导翻译的概念和基本原理。
15. 请解释正则表达式和有限自动机之间的关系。
注意:以上为编译原理考试相关的问题,文中不含有标题相同的文字。
//东南大学一、文法G1: E→ET+|T T→TF*|F F→FP↑|P P→E|i 1、试证明符号串TET+*i↑是G1的一个句型(要求画出语法树)。
2、写出该句型的所有短语,简单短句和句柄。
三、 1、试写出一个上下文无关文法G3,它能产生配对的圆括号串(例如,(),(()),()(())等,甚至包含0对括号)。
2、使用文法G3给出输入串(())()#的自上而下分析过程。
四、已知文法G4: S→aAb|Sc|ε A→aAb|ε 1、给出G4文法的LR(0)项目集规范族; 2、构造SLR分析表; 3、G4文法所定义的语言; 4、已知有如下文法及相应的LR分析表,试给出语句01001#的LR分析过程(填写下表)。
S→AAA A→1A A→0五、 1、翻译下面语句成四元式中间代码序列和后缀式(逆波兰式); while x+y>a do if a<10 then a:=a+1 else x:=x-1; 2、翻译布尔表达式 (a>b) or (c=d) and not (e<f) 成转移四元式序列(即四元式中仅包含(zθ,-,-,-)和(j,-,-,-)两类语句,其中θ为关系运算符。
)一、判断下列命题的真假,并简述理由:(20分) 1、文法G的一个句子对应于多个推导,则G是二义的。
2、LL(1)分析必须对原有文法提取左因子和消除左递归。
3、算符优先分析法采用“移近-归约”技术,其归约过程是规范的。
4、文法S→aA;A→Ab;A→b是LR(0)文法(S为文法的开始符号)。
5、一个BASIC解释程序和编译程序的不同在于,解释程序由语法制导翻译成目标代码并立即执行之,而编译程序需产生中间代码及优化。
二、设计一个最小状态有穷自动机,识别由下列子串组成的任意字符串。
(20分) GO,GOTO,TOO,ON 例如:GOTOONGOTOOGOON是合法字符串。
三、构造一个LL(1)文法G,识别语言L:(20分) L={ω|ω为{0,1}上不包括两个相邻的1的非空串} 并证明你的结论。
一、填空(每空0.5分,共 10分)1、编译程序的功能是是对(高级语言)进行翻译,使之生成目标代码。
2、编译程序的工作过程一般划分为5个阶段:(词法分析)、语法分析、语义分析与中间代码生成,(代码优化)及目标代码生成。
另外还有表格管理和(出错处理)。
3、一个上下文无关文法所含四个组成部分是一组终结符号、一组(非终结符号)、一个开始符号、(一组产生式)。
4、设G是一个给定的文法,S是文法的开始符号,如果S=> x(其中x∈V*),则称x 是文法的一个(句型)。
5、规范归约中的可归约串是指句柄,算符优先分析中的可归约串是指(最左素短语)。
6、在编译过程中,可采用的中间代码形式有()、()、()等。
(三元式、间接三元式、四元式、逆波兰式、抽象语法树)(任选三个即可)7、语法分析最常用的两类方法是(自上而下)和(自下而上)分析法。
8、表达式(a+b)*c的后缀表达式为(ab+c*)。
9、符号表的结构一般有(线性表)、(有序表)、(散列表或哈希表)等。
分别使用的查找方法有(顺序查找)、(折半查找)和(哈希法查找)10、代码优化的目的是(减少代码的时空开销)。
11、寄存器是CPU内部的(存储单元),其访问时间小于CPU对内存的访问时间。
12、如果一个句子存在两棵不同的语法树就说明该句子是(二义性)的。
二、选择题(每题1分,共10分)1、文法的开始符号经多步推导产生的文法符号序列(仅包含终结符)是文法的(D )。
A.短语B.句柄C.句型D.句子2、构造编译程序应掌握(D)。
A.源程序B.目标语言C.编译方法D.以上三项都是3、不属于循环优化的主要方法的是(B)。
A.强度削弱B.删除无用赋值C.删除归纳变量D.代码外提4、使用(A)可以定义一个程序的含义。
A.语义规则B.词法规则C.产生规则D.左结合规则5、优化可生成(D)的目标代码。
A .运行时间较短B .占用存储空间较小C .运行时间短但占用内存空间大D .运行时间短且占用存储空间小6、有文法G :E →E*T|T , T →T+i|i ,则输入串1+2*8+6按该文法G 归约,其值为(B )。
一章:1、编译程序各阶段都涉及。
A、词法分析B、表格管理C、语法分析D、语义分析2、下列哪个程序不是编译程序的组成部分?。
A、词法分析程序B、代码读入程序C、代码生成程序D、语法分析程序3、编译程序各阶段的工作往往是进行的。
A、顺序B、并行C、成批D、穿插4、词法分析所依据的是。
A、语义规则B、构词规则C、语法规则D、等价变换规则5、编译程序的语法分析器可以发现源程序中的。
A、语义错误B、语法和语义错误C、错误并校正D、语法错误6、高级语言源程序经编译后产生的程序是。
A、源程序B、目标程序C、函数D、过程1、扫描器的任务是从源程序中识别出一个个单词符号。
2、高级语言源程序有两种执行方式,即解释和编译。
判断:高级语言编写的源程序都必须通过编译,产生目标代码后才能运行。
多遍扫描的编译程序的多遍是指多次重复读源程序。
高级语言程序到低级语言程序的转换是基于语义的等价变换。
编译程序中错误处理的任务是对检查出的错误进行修改。
目标程序一定是机器语言程序。
连接装配程序可把经编译程序产生的目标程序变成可执行的机器语言程序。
简答题:1、请指出下列错误信息可能是编译的哪个阶段报告的?①else没有匹配的if;②数组下标越界;③使用的函数没有定义;④在数中出现了非数字信息。
答:①语法分析阶段②语义分析与中间代码生成阶段③语义分析与中间代码生成阶段④词法分析阶段2、何谓源程序、中间代码和目标代码?它们三者之间有何种关系?答:所谓源程序是指用某种高级语言编写的程序,它是编译程序的加工对象。
目标程序是指低级语言(机器语言或汇编语言)编写的程序,它是编译程序的加工结果。
中间代码是其结构介于源程序和目标程序之间的一种机内表示形式,它是编译程序产生的中间临时结果。
它们三者之间的关系是等价关系,即结构不同,但语义相同。
二章:1、文法G:S-xSx|y所识别的语言是。
A、xyx B 、(xyx)* C、x n yx n(n≥0) D、x*yx*2、设有文法G[S]=({S,B},{b},{S-b|bB,B-bS},S),该文法所描述的语言是。
第一章练习题(绪论)一、选择题1.编译程序是一种常用的软件。
A) 应用B) 系统C) 实时系统D) 分布式系统2.编译程序生成的目标代码程序是可执行程序。
A) 一定B) 不一定3.编译程序的大多数时间是花在上。
A) 词法分析B) 语法分析C) 出错处理D) 表格管理4.将编译程序分成若干“遍”将。
A)提高编译程序的执行效率;B)使编译程序的结构更加清晰,提高目标程序质量;C)充分利用内存空间,提高机器的执行效率。
5.编译程序各个阶段都涉及到的工作有。
A) 词法分析B) 语法分析C) 语义分析D) 表格管理6.词法分析的主要功能是。
A) 识别字符串B) 识别语句C) 识别单词D) 识别标识符7.若某程序设计语言允许标识符先使用后说明,则其编译程序就必须。
A) 多遍扫描B) 一遍扫描8.编译方式与解释方式的根本区别在于。
A) 执行速度的快慢B) 是否生成目标代码C) 是否语义分析9.多遍编译与一遍编译的主要区别在于。
A)多遍编译是编译的五大部分重复多遍执行,而一遍编译是五大部分只执行一遍;B)一遍编译是对源程序分析一遍就立即执行,而多遍编译是对源程序重复多遍分析再执行;C)多遍编译要生成目标代码才执行,而一遍编译不生成目标代码直接分析执行;D)多遍编译是五大部分依次独立完成,一遍编译是五大部分交叉调用执行完成。
10.编译程序分成“前端”和“后端”的好处是A)便于移植B)便于功能的扩充C)便于减少工作量D)以上均正确第二章练习题(文法与语言)一、选择题1.文法 G 产生的 (1) 的全体是该文法描述的语言。
A.句型B. 终结符集C. 非终结符集D. 句子2.若文法 G 定义的语言是无限集,则文法必然是 (2) A递归的 B 上下文无关的 C 二义性的 D 无二义性的3. Chomsky 定义的四种形式语言文法中, 0 型文法又称为(A)文法;1 型文法又称为(C)文法;2 型语言可由(G) 识别。
A 短语结构文法B 上下文无关文法C 上下文有关文法D 正规文法E 图灵机F 有限自动机G 下推自动机4.一个文法所描述的语言是(A);描述一个语言的文法是(B)。
清华大学版编译原理答案《编译原理》课后习题第1 章引论第1 题解释下列术语:(1)编译程序:如果源语言为高级语言,目标语言为某台计算机上的汇编语言或机器语言,则此翻译程序称为编译程序。
(2)源程序:源语言编写的程序称为源程序。
(3)目标程序:目标语言书写的程序称为目标程序。
(4)编译程序的前端:它由这样一些阶段组成:这些阶段的工作主要依赖于源语言而与目标机无关。
通常前端包括词法分析、语法分析、语义分析和中间代码生成这些阶段,某些优化工作也可在前端做,也包括与前端每个阶段相关的出错处理工作和符号表管理等工作。
(5)后端:指那些依赖于目标机而一般不依赖源语言,只与中间代码有关的那些阶段,即目标代码生成,以及相关出错处理和符号表操作。
(6)遍:是对源程序或其等价的中间语言程序从头到尾扫视并完成规定任务的过程。
第2 题一个典型的编译程序通常由哪些部分组成?各部分的主要功能是什么?并画出编译程序的总体结构图。
答案:一个典型的编译程序通常包含8 个组成部分,它们是词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、中间代码优化程序、目标代码生成程序、表格管理程序和错误处理程序。
其各部分的主要功能简述如下。
词法分析程序:输人源程序,拼单词、检查单词和分析单词,输出单词的机内表达形式。
语法分析程序:检查源程序中存在的形式语法错误,输出错误处理信息。
语义分析程序:进行语义检查和分析语义信息,并把分析的结果保存到各类语义信息表中。
中间代码生成程序:按照语义规则,将语法分析程序分析出的语法单位转换成一定形式的中间语言代码,如三元式或四元式。
中间代码优化程序:为了产生高质量的目标代码,对中间代码进行等价变换处理。
目标代码生成程序:将优化后的中间代码程序转换成目标代码程序。
表格管理程序:负责建立、填写和查找等一系列表格工作。
表格的作用是记录源程序的各类信息和编译各阶段的进展情况,编译的每个阶段所需信息多数都从表格中读取,产生的中间结果都记录在相应的表格中。
《编译原理》考试试题及答案(汇总)一、是非题(请在括号,正确的划√,错误的划×)(每个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分)1.设G [S ]是一个文法,我们把能由文法的 (1) 推导出来的符号串α称为G 的一个句型。
当句型α仅由 (2) 组成时 (即α∈V T *),则将它称为G 产生的句子。
2.从某一给定的状态q 出发,仅经过若干条 (3) 的矢线所能达到的状态所组成的集合称为ε-CLOSURE(q)。
3.设G=(V N ,V T ,P,S)是一文法,我们说G 中的一个符号X ∈V N ∪V T 是有用的,是指X 至少出现在 (4) 的推导过程中,否则,就说X 是无用的。
我们将不含形如A→A 的产生式和不含无用符号及无用产生式的文法称为 (5) 。
4.我们常采用形如 (class, value)的二元式作为一个单词的 (6) 。
其中,class 是一个整数,用来指示该单词的 (7) ,value 则是单词之值。
5.一个文法G[S]可表示成形如 (8) 的四元式。
其中V N ,V T ,P 均为非空的有限集,分别称为非终结符号集、终结符号集和产生式集, S ∈V N 为文法的开始符号。
此外,将出现在各产生式左部和右部的一切符号所组成的集合称为 (9) ,记作V 。
显然,V=V N ∪V T ,V N ∩V T =∅。
6.通常,可通过两种途径来构造词法分析程序。
其一是根据对语言中各类单词的某种描述或定义,用 (10) 构造词法分析程序;另外一种途径是所谓词法分析程序的(11) 。
7.设G 为一文法,A→α是G 的一个产生式,如果α具有υAδ的形式,其中υ,δ不同时为ε,则称产生式A→α是 (12) 。
若存在推导δυαA A *⇒⇒,则称产生式A→α是 (13) 。
8.设M=(K,Σ,f,S 0,Z)为一DFA ,并设s 和t 是M 的两个不同状态,我们说状态s,t 为某一输入串w (14) ,是指从s,t 中之一出发,当扫视完w 之后到达M 的终态,但从其中的另一个状态出发,当扫视完同一个w 后而进入 (15) 。
复习题一一、填空题1、编译过程的各阶段都需要进行()管理和()处理,所以在典型编译程序框图中,各阶段对应的程序都和上述管理或处理操作程序相联系。
2、对给定文法G[E],由推导序列E=>E+T=>T+T=>i+T=>i+i 可知:该推导为()推导,从该推导序列可得到()个句型,其中的()同时也是句子。
3、语法分析方法分为自上而下与自下而上两类,自上而下的分析方法方要有递归子程序分析法和();而自下而上的分析方法主要有()和()。
4、用四元组G =(VN,VT,P,S)表示文法,则其元素VN表示()集;元素VT表示()集;元素P表示规则集;元素S表示开始符号,它必须是一个()符号。
5、YACC是一种()分析程序的自动构造工具;而LEX是一种()分析程序的自动构造工具。
6、用优先函数表示优先关系的优点是(),缺点是()。
根据优先关系矩阵计算优先函数可用Floyed迭代法和()法。
7、对一个文法G,在其LR(0)项目集规范族DFA中,当有归约项目和()项目或()项目共存于同一个状态中时,该文法就不是LR(0) 文法。
8、对于A∈VN 定义A的后续符号集:FOLLOW(A)={a|S=*>uAβ, a∈VT,且a∈(),u∈VT*,β∈V+;若(),则#∈FOLLOW(A)。
也可以定义为:FOLLOW(A)={a|S=*>…Aa…,a ∈VT}。
若有(),则规定#∈FOLLOW(A)。
9、基本块的定义:一个基本块是指程序中一个执行的语句序列,其中只有一个入口和一个出口。
入口是程序第一个语句或转移语句的目标语句,或转移语句的后继第一个语句。
出口是程序()或转移语句。
在基本块范围内的优化称为()。
10、预测分析器由预测分析表、先进后出栈(用来存放分析过程的语法符号)和()三部分组成。
其中预测分析表是一个二维矩阵,其形式为M[A,a],其中A∈V N,a∈V T或#。
若有产生式A→α,使得a∈(),则将A→α填入M[A,a]中。
编译原理复习例题(有些内容没有覆盖,比如优化、SLR(1)、LR(1)、LALR(1)等。
但要求至少要按照作业题的范围复习。
)一选择题1.编译的各阶段工作都涉及。
[A]词法分析[B]表格管理 [C]语法分析 [D]语义分析2.型文法也称为正规文法。
[A] 0 [B] 1 [C] 2 [D] 33.文法不是LL(1)的。
[A]递归 [B]右递归 [C]2型 [D]含有公共左因子的4.文法E→E+E|E*E|i的句子i*i+i*i有棵不同的语法树。
[A] 1 [B] 3 [C] 5 [D] 75.文法 S→aaS|abc 定义的语言是。
[A]{a2k bc|k>0} [B]{a k bc|k>0}[C]{a2k-1bc|k>0} [D]{a k a k bc|k>0}6.若B为非终结符,则 A→α.Bβ为。
[A]移进项目 [B]归约项目 [C]接受项目 [D]待约项目7.同心集合并可能会产生新的冲突。
[A]二义 [B]移进/移进 [C]移进/归约 [D]归约/归约8.代码优化时所依据的是。
[A]语法规则 [B]词法规则[C]等价变换规则 [D]语义规则9.表达式a-(-b)*c的逆波兰表示(@为单目减)为。
[A]a-b@c* [B]ab@c*- [C]ab@- [D]ab@c-*10.过程的DISPLAY表是用于存取过程的。
[A]非局部变量[B]嵌套层次 [C]返回地址 [D]入口地址二填空题1.词法分析阶段的任务式从左到右扫描字符流,从而逐个识别一个个的单词。
2.对于文法G[E]:E→T|E+T T→F|T*F F→P^F|P P→(E)|i,句型T+T*F+i的句柄是。
3.最右推导的逆过程称为规范归约,也称为最左归约。
4.符号表的每一项是由名字栏和两个栏目组成。
在目标代码生成阶段,符号表是的依据。
三判断题(认为正确的填“T”,错的填“F”)【】1.同心集的合并有可能产生“归约/归约”冲突。
清华大学1997年研究生入学考试编译原理试题(共50分)
1.(8分)
已知正规式(1)((a|b)* |aa)*b和正规式(2)(a|b)*b,试用有限自动机的等价性证明正规式(1)和(2)是等价的,给出相应的正规文法。
2.(8分)
已知文法G [A ]为:
A→aABl|a
B→Bb|d
①试给出与G[A]等价的LL(1)文法G[A]
②构造G'[A]的预测分析表给出输入串aade#的分析过程。
3.(8分)
有文法G[S]为:
S→a|b|(A)
A→SdA|S
完成下列算符优先关系表,并判断G[S]是否为算符优先文法。
G[S]的算符优先关系表
表1 算符优先关系表
①给出句型(sdsds)的短语,简单短语句柄,素短语和最大素短语。
②给出输入串(adb)#的分析过程。
4.(8分)
已知文法G[S]为:
S→aAd|;Bd|aB↑|;A↑
A→a
B→a
①试判断G[S]是否为LALR(1)文法
②当一个文法是LR(1)而不是LALR(1)时,那么LR(1)项目集的同心集合并后会出现哪几种冲突,请说明理由。
5.(6分)
试对下面基本块进行优化
①应用DAG对该基本块进行优化,给出优化后的语句序列。
②给出当只有L在基本块出口后为活跃时的优化结果。
基本块为:
X=B*C
Y=B/C
Z=X+Y
W=9*Z
6.(6分)
已知文法G[S]为:
S→dAB
A→aA|a
B→Bb|ε
①试向G[S]是否为正规文法,为什么?
②G[S]新产生的语言是什么?
G[S]能否改写为等价的正规文法?
7.(6分)
某语言允许过程嵌套定义和逆归调用(如PACAL语言),若在栈式动态存分配中采用嵌套层次显示表Display解决对非局部变量的引用问题,试给出下列程序执行到语句“b:=10;”时运行栈及Display表的示意图。
var x, y;
procedurc p;
var a;
procedure q;
var b;
begin(q)
b : =10;
end (q);
procedure s;
var c,d;
procedure r;
var e, f;
begin (r)
call q;
edn (r);
begin (s)
call r;
end (s); begin (p)
call s;
end (p);
begin (main)
call p;
end (main).。