编译原理复习资料练习题二(LR文法)
编译原理复习资料练习题二(LR文法)

LR文法复习LR分析法通常包括了4种具体的分析方法:LR(0)、SLR(1)、LR(1)、LALR(1)分析法,这4种LR分析法的原理如图0.2所示。
这4种LR分析法的总控程序是相同的,只是分析表不同。
关键是掌握构造分析表的方法,以及使用分析表进行分析的方法。
LR(0)是LR分析法的基础,首先要深刻地理解LR(0)分析法的思想,熟练掌握LR(0)文法的判断方法和LR(0)分析表的构造方法,这里再次强调,其方法是非常机械的,只要多加练习,就可以掌握得非常牢固。
在掌握了LR(0)分析法后,就可以看出LR(0)分析法要求构造出的识别可归前缀的有穷自动机的各个状态不能有冲突项目,而SLR(1)分析可以部分地解决这个问题,其方法是向前多看一个输入符号,这样又需要掌握SLR(1)分析法,同样要注意其适用的文法限制和分析表的构造方法。
要注意SLR(1)只是部分解决了LR(0)的缺陷,当我们需要进一步加强分析法的能力时,就到达了LR(1)分析法和LALR(1)分析法。
这4种分析法都掌握后,最好仔细总结一下其内在的关系,使用的文法限制等。
总之,这部分要掌握每种分析法适用的文法,并能构造出相应分析表,以及应该做到当给出一个该文法的句子,能够跟踪使用分析表进行分析。
LR文法练习一、构造出文法G(S):(1)S → BB(2)B → aB(3)B→ b的LR 分析表。
假定输入串为abab ,请给出LR 分析过程(即按照步骤给出状态,符号,输入串的变化过程)。
答:步骤 状态 符号 输入串 0 0 # abab# 1 03 #a bab# 2 034 #ab ab# 3 038 #aB ab# 4 02 #B ab# 5 026 #Ba b# 6 0267 #Bab # 7 0269 #BaB # 8 025 #BB #9 01 #S # acc二、给定文法G (S ):SS L L a aS L S ,)(→→写出句子(a,a,aa ) 的规范规约过程,并指出每一步的句柄。
(完整版)编译原理复习题及答案

编译原理复习题及答案一、选择题1.一个正规语言只能对应(B)A 一个正规文法B 一个最小有限状态自动机2.文法G[A]:A→εA→aB B→Ab B→a是(A)A 正规文法B 二型文法3.下面说法正确的是(A)A 一个SLR(1)文法一定也是LALR(1)文法B 一个LR(1)文法一定也是LALR(1)文法4.一个上下文无关文法消除了左递归,提取了左公共因子后是满足LL(1)文法的(A)A 必要条件B 充分必要条件5.下面说法正确的是(B)A 一个正规式只能对应一个确定的有限状态自动机B 一个正规语言可能对应多个正规文法6.算符优先分析与规范归约相比的优点是(A)A 归约速度快B 对文法限制少7.一个LR(1)文法合并同心集后若不是LALR(1)文法(B)A 则可能存在移进/归约冲突B 则可能存在归约/归约冲突C 则可能存在移进/归约冲突和归约/归约冲突8.下面说法正确的是(A)A Lex是一个词法分析器的生成器B Yacc是一个语法分析器9.下面说法正确的是(A)A 一个正规文法也一定是二型文法B 一个二型文法也一定能有一个等价的正规文法10.编译原理是对(C)。
A、机器语言的执行B、汇编语言的翻译C、高级语言的翻译D、高级语言程序的解释执行11.(A)是一种典型的解释型语言。
A.BASIC B.C C.FORTRAN D.PASCAL12.把汇编语言程序翻译成机器可执行的目标程序的工作是由(B)完成的。
A. 编译器B. 汇编器C. 解释器D. 预处理器13.用高级语言编写的程序经编译后产生的程序叫(B)A.源程序 B.目标程序C.连接程序D.解释程序14.(C)不是编译程序的组成部分。
A.词法分析程序B.代码生成程序C.设备管理程序D.语法分析程序15.通常一个编译程序中,不仅包含词法分析,语法分析,语义分析,中间代码生成,代码优化,目标代码生成等六个部分,还应包括(C)。
A.模拟执行器B.解释器 C.表格处理和出错处理D.符号执行器16.编译程序绝大多数时间花在(D)上。
编译原理复习题集

《编译原理》复习题集1.名词解释短语句柄文法上下文无关文法LL(1)文法LR(1)文法语法分析无环路有向图(DAG)后缀式语法制导翻译遍局部优化词法分析语法分析语义分析源语言源程序目标语言中间语言(中间表示)2.简答题(1)编译程序和高级语言有什么区别?(2)编译程序的工作分为那几个阶段?(3)简述自下而上的分析方法。
(4)目标代码有哪几种形式?生成目标代码时通常应考虑哪几个问题?(5)何谓优化?按所涉及的程序范围可分为哪几级优化?(6)简述代码优化的目的和意义。
3.叙述下面的正规式描述的语言,并画出接受该语言的最简DFA的状态转换图。
( 1 | 01 )* 0*4.Pascal语言无符号数的正规定义如下:num→digit+ (.digit+)? (E(+|-)? digit+)?其中digit表示数字,用状态转换图表示接受无符号数的确定有限自动机。
5.画出Pascal中实数(不带正负号,可带指数部分)的状态转换图。
6.用状态转换图表示接收(a|b)*aa的确定的有限自动机。
7.处于/* 和 */之间的串构成注解,注解中间没有*/。
画出接受这种注解的DFA的状态转换图。
8.某操作系统下合法的文件名为device:name.extension其中第一部分(device:)和第三部分(.extension)可缺省,device, name和extension都是字母串,长度不限,但至少为1,画出识别这种文件名的确定有限自动机。
9.构造一个DFA,它接受∑={0, 1}上0和1的个数都是偶数的字符串。
10.设有非确定的有自限动机 NFA M=({A,B,C},{0,1},δ,{A},{C}),其中:δ(A,0)={C} δ (A,1)={A,B} δ (B,1)={C} δ (C,1)={C}。
请画出状态转换距阵和状态转换图。
11.设L⊆ {a,b,c}* 是满足下述条件的符号串构成的语言:(1)若出现a ,则其后至少紧跟两个c ;(2)若出现b ,其后至少紧跟一个c 。
编译原理复习题有答案版

1、给出下面语言的相应文法。
L1={a n b n c i|n≥1,i≥0}答案:S→AB|BA→a|aAB→bBc|bc2.给出下面语言的相应文法L1={a n b n c m d m| m,n≥1,n为奇数,m为偶数}。
答案:文法G(S):S→ACA→aaAbb/abC→ccCcc/cc3、构造一个DFA,它接受 ={a,b}上所有包含ab的字符串。
(要求:先将正规式转化为NFA,再将NFA确定化,最小化)(一)相应的正规式为(a|b)*ab(a|b)*(二)①与此正规式对应的NFA为答案;在自己写的纸上4、对下面的文法G:E→TE’E’→+E|εT→FT’T’→T|εF→PF’F’→*F’|εP→(E)|a|b|∧(1)证明这个文法是LL(1)的。
考虑下列产生式:E’ ->E|εT’ ->T|εF’ ->*F’ |εP ->(E) |∧a|bFIRST(+E)∩FIRST(ε)={+}∩{ε}=φFIRST(+E)∩FOLLOW(E')={+}∩{#,)}=φFIRST(T)∩FIRST(ε)={(,a,b,^}∩{ε}=φFIRST(T)∩FOLLOW(T')={(,a,b,^}∩{+,),#}=φFIRST(*F')∩FIRST(ε)={*}∩{ε}=φFIRST(*F')∩FOLLOW(F')={*}∩{(,a,b,^,+,),#}=φFIRST((E))∩FIRST(a) ∩FIRST(b) ∩FIRST(^)=φ所以,该文法式LL(1)文法.计算这个文法的每个非终结符的FIRST和FOLLOW。
(8分)答案:FIRST(E)={(,a,b,^}FIRST(E')={+,ε}FIRST(T)={(,a,b,^}FIRST(T')={(,a,b,^,ε}FIRST(F)={(,a,b,^}FIRST(F')={*,ε}FIRST(P)={(,a,b,^}FOLLOW(E)={#,)}FOLLOW(E')={#,)}FOLLOW(T)={+,),#}FOLLOW(T')={+,),#}FOLLOW(F)={(,a,b,^,+,),#}FOLLOW(F')={(,a,b,^,+,),#}FOLLOW(P)={*,(,a,b,^,+,),#}(3)构造它的预测分析表。
编译原理复习题

把汇编语言程序翻译成机器可执行的目标程序的工作是由 B 完成的。
A、编译器 C、解释器 D、预处理器编译程序生成的目标程序 B 是机器语言的程序。
A、一定B、不一定下面关于解释程序的描述正确的是 B 。
①解释程序的特点是处理程序时不产生目标代码。
②解释程序适用于COBOL和FORTRAN语言。
③解释程序是为打开编译程序技术得僵局而开发的。
{A、①②B、①C、①②③D、②③G[I]:I→I1│I0│Ia│Ic│a│b│c下列符号串中是该文法的句子有 B 。
① ab0 ② a0c01 ③ aaa ④ bc10A、①B、②③④C、③④D、①②③④LL(1)文法的A、必要条件B、充分必要条件1.一个语言的文法是 B 。
A、唯一的B、不唯一的C、个数有限的2. 设有文法G[S]:S::=S*S|S+S|(S)|a该文法 B 二义性文法A 是B 不是 C无法判断。
3.给定文法A→bA∣cc,下面的符号串中,为该文法句子的是 A 。
A、ccB、bcbcC、bccbccD、bbbcc4.编译过程中,语法分析器的任务是 B 。
①分析单词是怎样构成的②分析单词串是如何构成语句和说明的③分析语句和说明是如何构成程序的④分析程序的结构A、②③B、②③④C、①②③D、①②③④5.一个句型中的最左 B 成为该句型的句柄。
A、短语B、简单短语C、素短语D、终结符号1. 面向机器语言指的是____C__。
A、用于解决机器硬件设计问题的语言B、特定计算机系统所固有的语言C、各种计算机系统都通用的语言D、只能在一台计算机上使用的语言2.如果文法G是无二义的,则下面 D 成立。
A、文法中的句子对应两棵不同的语法树;B、文法中某个句子有两个不同的最左推导;C、文法中某个句子有两个不同的最右推导;D、文法中任一句子,它的最左或最右推导对应的语法树相同。
3.运行阶段的存储组织与管理的目的是____C__。
①提高编译程序的运行速度。
②提高目标程序的运行速度。
编译原理复习题2

编译原理复习题21、(10分)下面的文法G[S]是否是LL(1)文法,说明理由,构造LL(1)分析表S→aBc|bABA→aAb|BbB→cB|2、(5分)消除下列文法的左递归,消除左递归后判断是否是LL(1)文法。
S→SaB|bBA→S|aB→Ac3、(5分)构造下面算符文法的优先矩阵,判断是否是算符优先文法S→A[]A→[A→aAA→B]B→a4、(10分)将表达式A+B某(C-D)-E/F↑G分别表示为三元式、四元式、逆波兰式序列5、(10分)现有文法如下:S→aS|bS|a判断该文法是哪一类LR文法,说明理由,并构造相应的分析表。
1、已知文法GA::=aABe|aB::=Bb|d(1)给出与上述文法等价的LL(1)文法G’。
(2)构造预测分析表并给出输入串aade#分析过程。
(10分)2、设已给文法G:E::=E+TE::=TT::=T某FT::=FF::=P↑FF::=PP::=(E)P::=i构造此文法的算符优先矩阵。
(10分)某某某某3、有正规式babb(abb)(1)构造该正规式所对应的NFA(画出状态转换图)。
(2)将所求的NFA确定化。
(画出确定化的状态转换图)。
(3)将所求的NFA最小化。
(画出最小化后的状态转换图)。
(10分)4、若有文法G(S)的产生式如下:S::=L=RS::=RL::=某RL::=iR::=L,构造识别所有项目集规范族的DFA。
(15分)(1)判断该文法是否是LR(0)文法,说明理由。
(2)判断该文法是否是SLR(1)文法,说明理由。
(3)判断该文法是否是LR(1)文法,说明理由。
(4)判断该文法是否是LALR(1)文法,说明理由1、(10分)将表达式((B某D+A)/E+D)某F+G分别表示为三元式、四元式、逆波兰式序列2、(10分)对基本块P画出DAG图B:=3D:=A+CE::=A某CF:=E+DG:=B某FH:=A+CI:=A某CJ:=H+IK:=B某5L:=K+JM:=L假定只有L在基本块出口之后活跃,写出优化后的四元式序列。
编译原理与技术期末考试模拟试题2及答案
编译原理与技术模拟试题二一、填空题(20分,每空2分)1.1LR(1)分析法中,L的含义是,R的含义是。
答案:自左至右扫描输入串,最右推导的逆解释:若为文法G构造的移进-归约分析表中不含多重定义的条目,则称G为LR(k)文法,分析器被称为是LR(k)分析器,它所识别的语言被称为LR(k)语言。
L表示从左到右扫描输入序列,R表示逆序的最右推导,k表示为确定下一动作向前看的终结符个数,一般情况下k<=1。
当k=1时,简称LR。
1.2源程序经过编译后产生的程序称为。
答案:目标程序解释:源程序经过编译后产生的程序称为目标程序。
1.3词法分析的输出由和两部分组成。
答案:单词种别,单词的值解释:根据构词规则识别称为源程序的输入序列,称为词法分析。
词法分析阶段是编译过程的第一阶段,这个阶段的任务是对源程序从前到后(从左到右)逐个字符地扫描,从中识别出一个个“单词”符号。
“单词”符号是程序设计语言的基本语法单位,如关键字(或称保留字)、标识符、常数、运算符和分隔符(如标点符号、左右括号)等。
词法分析程序输出的“单词”常以二元组的方式输出,即单词种别和单词自身的值。
1.4文法G:S→AB,A→aA|ε,B→bBc|bc描述的语言L(G)=。
答案:{a m b k c k|m>=1,k>=0}解释:通过推导进行分析。
1.5允许用户随意地动态申请与释放内存空间应采用存储分配技术。
答案:堆解释:编译器怎样对存储空间进行组织和采用什么样的存储分配策略,很大程度上取决于程序设计语言中所采用的机制。
编译器具体实现时,根据语言机制的特性,采用静态分配策略、栈分配策略和堆分配策略三种方式的其中若干种。
静态分配策略是指编译时安排所有数据对象的存储,即绑定是静态确定的;栈分配策略是指按栈的方式管理运行时的存储;堆分配策略是指在运行时根据要求从堆数据区动态地分配和释放存储。
1.6一个文法产生的_______________________称为该文法的语言。
完整版编译原理复习题及答案
A必要条件B充分必要条件
下面说法正确的是( A )
A一个正规文法也一定是二型文法
B一个二型文法也一定能有一个等价的正规文法 编译原理是对(C)。
A、机器语言的执行B、汇编语言的翻译
D、咼级语言程序的解释执行
(A)是一种典型的解释型语言。
A.线性表B.树
词法分析器的输出结果是(D)。
A、单词自身值
C、单词的种别编码 词法分析器不能(D)
A.识别出数值常量
C.扫描源程序并识别记号
C.完全图D.堆栈
B、单词在符号表中的位置
D、单词的种别编码和自身值
B.过滤源程序中的注释
D.发现括号不匹配
文法:G:StxSx|y所识别的语言是(D)。
A、xyxB、(xyx)*
A.状态数相等
C.所识别的语言相等
若状态k含有项目“ 归约的语法分析方法是
LR分析法
源程序
(C)。
Af a
(D)。
B.LR(0)分析法
a•为(B)项目。
B.移进
_宀曰 一定是
但不能用正则表达式表示。
无法判定是否存在
C. a0b0a
D. cba
(D)
D. bc10
C.非终结符集
(A)
C.二义性的
A.BASICB.C
把汇编语言程序翻译成机器可执行的目标程序的工作是由(B)完成的。
A.编译器
B.汇编器
C.解释器
D.
预处理器
用高级语言编写的程序经编译后产生的程序叫
(B)
A•源程序
B.目标程序
C.连接程序
编译原理复习题及答案
1、试证明:任何LL(1)文法均为无二义性文法。
证:LL(1)文法的分析句子过程的每一步,永远只有唯一的分析动作可进行。
现在,假设LL(1)文法G是二义性文法,则存在句子α,它有两个不同的语法树。
即存在着句子α有两个不同的最左推导。
从而可知,用LL(1)方法进行句子α的分析过程中的某步中,存在两种不同的产生式替换,且均能正确进行语法分析,即LL(1)分析动作存在不确定性。
与LL(1)性质矛盾。
所以,G不是LL(1)文法。
2、 LL ( 1 )分析法对文法有哪些要求?对于 G 中的每个产生式 A →γ 1 | γ 2 | … | γ m ,其各候选式均应满足:(1)不同的候选式不能推出以同一终结符号打头的符号串,即FIRST( γ i ) ∩ FIRST( γ j )= φ( 1 ≤ i , j ≤ m ; i ≠ j )(2)若有γ j ε,则其余候选式γ i 所能推出的符号串不能以 FOLLOW(A) 中的终结符号开始,即有FIRST( γ i ) ∩ FOLLOW(A)= φ( i ≤ 1,2, … ,m ; i ≠ j )3、一个上下文无关文法生成句子abbaa的推导树如下:(1)给出串abbaa最左推导、最右推导。
(2)该文法的产生式集合P可能有哪些元素?(3)找出该句子的所有短语、直接短语、句柄。
[答案](1)串abbaa最左推导:S=>ABS=>aBS=>aSBBS=>aεBBS=>aεbBS=>aεbbS=>aεbbAa=>aεbbaa最右推导:S=>ABS=>ABAa=>ABaa=>ASBBaa=>ASBbaa=>ASbbaa=>Aεbbaa=>aεbbaa(2)产生式有:S→ABS |Aa|εA→aB→SBB|b(3)该句子的短语有a1b1b2a2a3、a1、b1、b2、b1b2、a2a3、a2;直接短语有a1、b1、b2、a2;句柄是a1。
【精品】编译原理复习题集.docx
18.构造下面文法的LL(1)分析表。
DtTL
T t int|real
L — id R
R t , id R | £
19.已知文法G(S)
S-a| A| (T) TT S|S写出句子((a, a), a)的规范归约过程及每一步的句柄。
20.已知文法G(E)
S' t S
S t S B|B
B t0 | 1
27.写岀表达式(a + b*c)/(a+b)-d的逆波兰表示及三元式序列。
28.何谓优化?按所涉及的程序范围可分为哪几级优化?
29.目标代码有哪几种形式?生成目标代码时通常应考虑哪几个问题?
30・把表达式
■(a+b)*(c+d)+(a+b+c)
翻译成三元式。
8.构造一个DFA,它接受2>{0,1}上0和1的个数都是偶数的字符串。
9.给出与下图的NFA等价的正规式。
10.把下面的NFA确定化。
11.下面两个文法屮哪一个不是LR(1)文法?对非LR(1)的那个文法。给出那个有 移进一归约冲突的规范的LR(1)项目集。
S-aAc A t bbA|b
S ~》aAc A t bAb|b
34.—个C语言程序如下:
func(il, i2, i3)
long il, i2, i3;
{
long jl, j2, j3;
printf (^Addresses of il,i2, i3二%o, %o, %o\n〃,&il, &i2, &i3); printf (^Addresses of jl, j2, j3 = %o, %o, %o\rT, &jl, &j2, &j3);
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
LR文法复习
LR分析法通常包括了4种具体的分析方法:LR(0)、SLR(1)、LR(1)、LALR(1)分析法,这4种LR分析法的原理如图0.2所示。
这4种LR分析法的总控程序是相同的,只是分析表不同。
关键是掌握构造分析表的方法,以及使用分析表进行分析的方法。
LR(0)是LR分析法的基础,首先要深刻地理解LR(0)分析法的思想,熟练掌握LR(0)文法的判断方法和LR(0)分析表的构造方法,这里再次强调,其方法是非常机械的,只要多加练习,就可以掌握得非常牢固。
在掌握了LR(0)分析法后,就可以看出LR(0)分析法要求构造出的识别可归前缀的有穷自动机的各个状态不能有冲突项目,而SLR(1)分析可以部分地解决这个问题,其方法是向前多看一个输入符号,这样又需要掌握SLR(1)分析法,同样要注意其适用的文法限制和分析表的构造方法。
要注意SLR(1)只是部分解决了LR(0)的缺陷,当我们需要进一步加强分析法的能力时,就到达了LR(1)分析法和LALR(1)分析法。
这4种分析法都掌握后,最好仔细总结一下其内在的关系,使用的文法限制等。
总之,这部分要掌握每种分析法适用的文法,并能构造出相应分析表,以及应该做到当给出一个该文法的句子,能够跟踪使用分析表进行分析。
LR文法练习
一、构造出文法G(S):
(1)S → BB
(2)B → aB
(3)B→ b
的LR 分析表。
假定输入串为abab ,请给出LR 分析过程(即按照步骤给出状态,符号,输入串的变化过程)。
答:
步骤 状态 符号 输入串 0 0 # abab# 1 03 #a bab# 2 034 #ab ab# 3 038 #aB ab# 4 02 #B ab# 5 026 #Ba b# 6 0267 #Bab # 7 0269 #BaB # 8 025 #BB #
9 01 #S # acc
二、给定文法G (S ):
S
S L L a aS L S ,)(→→
写出句子(a,a,aa ) 的规范规约过程,并指出每一步的句柄。
答:规范规约的过程:
句型(带下划线的是句柄) 规约规则 (a,a,aa ) S →a
(S,a,aa) L→S
(L,a,aa) S→a
(L,S,aa) L→L,S
(L,aa) S→a
(L,aS) S→aS
(L,S) L→L,A
(L) S→(L)
S
三、设已构造出文法G(S):
S→S(S)
S→ε
的LR分析表如下
假定输入串为( )( ),请给出LR分析过程(即状态,符号,输入串的变化过程)。
答:
分析过程:
步骤状态符号输入串
0 0 # ()()#
1 01 #S ()()#
2 012 #S( )()#
3 0123 #S(S )()#
4 0123
5 #S(S) ()#
5 01 #S ()#
6 012 #S( )#
7 0123 #S(S )#
8 01235 #S(S) #
9 01 #S # acc。