编译原理作业参考答案

合集下载

编译原理试题及答案

编译原理试题及答案

编译原理试题及答案一、选择题1. 编译器的主要功能是什么?A. 程序设计B. 程序翻译C. 程序调试D. 数据处理答案:B2. 下列哪一项不是编译器的前端处理过程?A. 词法分析B. 语法分析C. 语义分析D. 代码生成答案:D3. 在编译原理中,词法分析器的主要作用是什么?A. 识别程序中的关键字和标识符B. 将源代码转换为中间代码C. 检查程序的语法结构D. 确定程序的运行环境答案:A4. 语法分析通常采用哪种方法?A. 自顶向下分析B. 自底向上分析C. 正则表达式匹配D. 直接解释执行答案:B5. 语义分析的主要任务是什么?A. 检查程序的语法结构B. 检查程序的类型安全C. 识别程序中的变量和常量D. 将源代码转换为机器代码答案:B二、简答题1. 简述编译器的工作原理。

答案:编译器的工作原理主要包括以下几个步骤:词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成。

词法分析器将源代码分解成一系列的词素;语法分析器根据语法规则检查词素序列是否合法;语义分析器检查程序的语义正确性;中间代码生成器将源代码转换为中间代码;代码优化器对中间代码进行优化;最后,目标代码生成器将优化后的中间代码转换为目标机器代码。

2. 什么是词法分析器,它在编译过程中的作用是什么?答案:词法分析器是编译器前端的一个组成部分,负责将源代码分解成一个个的词素(tokens),如关键字、标识符、常量、运算符等。

它在编译过程中的作用是为语法分析器提供输入,是编译过程的基础。

三、论述题1. 论述编译器中的代码优化技术及其重要性。

答案:代码优化是编译过程中的一个重要环节,它旨在提高程序的执行效率,减少资源消耗。

常见的代码优化技术包括:常量折叠、死代码消除、公共子表达式消除、循环不变代码外提、数组边界检查消除等。

代码优化的重要性在于,它可以显著提高程序的运行速度和性能,同时降低程序对内存和处理器资源的需求。

四、计算题1. 给定一个简单的四则运算表达式,请写出其对应的逆波兰表达式。

编译原理 全部参考答案

编译原理 全部参考答案

第二章P-36-6(1)L(G)是0~9组成的数字串;(2)最左推导:N⇒ND⇒NDD⇒NDDD⇒DDDD⇒0DDD⇒01DD⇒012D⇒0127N⇒ND⇒DD⇒3D⇒34N⇒ND⇒NDD⇒DDD⇒5DD⇒56D⇒568最右推导:N⇒ND⇒N7⇒ND7⇒N27⇒ND27⇒N127⇒D127⇒0127N⇒ND⇒N4⇒D4⇒34N⇒ND⇒N8⇒ND8⇒N68⇒D68⇒568P-36-7G(S):(没有考虑正负符号问题)S→P|APP→1|3|5|7|9A→AD|NN→2|4|6|8|PD→0|N或者:(1)S→ABC|CA→1|2|3|4|5|6|7|8|9B→BA|B0|εC→1|3|5|7|9P-36-8G(E):E→T|E+T|E-TT→F|T*F|T/FF→(E)|i最左推导:E⇒E+T⇒T+T⇒F+T⇒i+T⇒i+T*F⇒i+F*F⇒i+i*F⇒i+i*iE⇒T⇒T*F⇒F*F⇒i*F⇒i*(E)⇒i*(E+T)⇒i*(T+T)⇒i*(F+T)⇒i*(i+T)⇒i*(i+F)⇒i*(i+i)最右推导:E⇒E+T⇒E+T*F⇒E+T*i⇒E+F*i⇒E+i*i⇒T+i*i⇒F+i*i⇒i+i*iE⇒T⇒T*F⇒T*(E)⇒T*(E+T)⇒T*(E+F)⇒T*(E+i)⇒T*(T+i)⇒T*(F+i)⇒T*(i+i)⇒F*(i+i)⇒i*(i+i)语法树:SiSeSiSiiSiS i S eS iiP-36-9句子:iiiei 有两个语法树: S ⇒iSeS ⇒iSei ⇒iiSei ⇒iiiei S ⇒iS ⇒iiSeS ⇒iiSei ⇒iiiei因此iiiei 是二义性句子,因此 该文法是二义性的。

P-36-10 S →TS|T T →(S)|()P-36-11L1: G(S): S →AC A →aAb|ab C →cC|ε L2: G(S): S →AB A →aA|ε B →bBc|bc L3: G(S): S →AB A →aAb|ε B →aAb|ε L4: G(S): S →1S0|A A →0A1|ε或者:S →A|B A →0A1|ε B →1B0|A 第三章(1)Ei+i+iE +TE +TT F iF iF iEE +TT F iT *FF iii+i*i Ei-i-iE-TE -TT F iF iF i确定化:最小化:{0,1,2,3,4,5},{6}{0,1,2,3,4,5}0={1,3,5} {0,1,2,3,4,5}1={1,2,4,6} {0,1,2,3,4},{5},{6} {0,1,2,3,4}0={1,3,5} {0,1,2,3},{4},{5},{6}{0,1,2,3}0={1,3} {0,1,2,3}1={1,2,4} {0,1},{2,3},{4},{5},{6}{0,1}0={1} {0,1}1={1,2} {2,3}0={3} {2,3}1={4} {0},{1},{2,3},{4},{5},{6}P64-8(1)(0|1)*01(2)(1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)*(0|5)|(0|5)(3)0*1(0|10*1)* | 1*0(1|01*0)*P84-12(a)a最小化:{0,1} {2,3}{0,1}a={1},{0,1}b={2}{2,3}a={0,3},{2,3}={3}{0,1},{2},{3}a(b)已经确定化,只需最小化:{0,1},{2,3,4,5}{0,1}a = {1} {0,1}b = {2,4}{2,3,4,5}a = {1,3,0,5} {2,3,4,5}b = {2,3,4,5}又:{2,4}a = {1,0} {2,4}b = {3,5} {3,5}a={3,5} {3,5}b = {2,4} 分划为:{0,1},{2,4},{3,5}{0,1}a = {1} {0,1}b = {2,4}{2,4}a = {1,0} {2,4}b = {3,5}{3,5}a = {3,5} {3,5}b = {2,4}所以不能再分aP64-14正规式:(0|10)*还可以:然后再确定化,最小化,结果应该一样。

《编译原理》作业参考答案

《编译原理》作业参考答案

《编译原理》作业参考答案一、填空1.图二图一。

2.文法是无ε产生式,且任意两个终结符之间至多有一种优先关系的算符文法。

3.最右推导最右推导。

4.对于循环中的有些代码,如果它产生的结果在循环中是不变的,就把它提到循环外来。

把程序中执行时间较长的运算替换为执行时间较短的运算。

5.对于文法中的每个非终结符A的各个产生式的候选首符集两两不相交;对文法中的每个非终结符A,若它存在某个候选首符集包含ε,则FIRST(A)∩FOLLOW(A)= ø6.控制。

7.语义分析和中间代码产生8.自上而下自下而上自上而下9.自下而上表达式10.自下而上11.源程序单词符号12. DFA初态唯一,NFA初态不唯一;DFA弧标记为Σ上的元素,NFA弧标记为Σ*上的元素;DFA的函数为单射,NFA函数不是单射13.词法,词法分析器,子程序,语法14.ε,a,ab,ab15.终结符号,非终结符号,产生式16.L(G)={a n | n≥1}17.1型,2型,3型18.二义的19.快20.终态,输入字21.单词符号,终结符22.归约23.必须24.直接25.终结符,更快26.E→E+∙T, E→E∙+T, E→∙E+T, E→E+T∙27.归约—归约28.类型检查,一致性检查29.词法分析、词法30.语法分析程序、语法31。

终结符号、产生式、开始符号、非终结符32.2、2、333.不需要避开34.符合、不符合35.推导36.包括37.Ass38.一定没有、一定没有、至多只有一个39.SLR(1)40.移进——归约41.a.控制流检查、b.一致性检查、c.相关名字检查二、判断下面语法是否正确1 ×2 ×3 √4 ×5 √6 ×三、简答题1.词法分析的任务是对输入的源程序进行单词及其属性的识别,为下一步的语法分析进行铺垫;有两种方法可以实现词法分析器:一,手工编写词法分析程序。

二,由词法分析器自动生成程序生成。

编译原理作业与答案

编译原理作业与答案

编译原理独立作业2010.5一、简答题1、 构造一个文法使其生成的语言是不允许0打头的偶正整数集合。

2、文法][E G :T T E T E E -+→,F F T F T T /*→,i E F )(→,构造句型i T T T *+-的语法树,并指出该句型的短语、直接短语、句柄、素短语和最左素短语。

3、 某LL(1)文法的预测分析表如下,请在下述分析过程表中填入输入串( a , a )$ 的分析过程。

4、 文法][S G :R L S =→,R S →,R L *→,i L →,L R →,求增广文法中LR(1)项目集的初态项目集I 0。

5、文法][S G :G G S S ;→,()G G t H →,)(S a H →,求出各非终结符的FISTVT 和LASTVT 集合。

二、分析题:1、构造自动机,使得它能识别字母表{0,1}上以00结尾的符号串,将构造的自动机确定化,并写出相应的正规文法。

2、文法][S G :RT eT S → εDR T → εdR R → bd a D →,写出每个非终结符的FIRST 集和FOLLOW 集,并判断该文法是否为LL(1)文法。

3、若有文法][S G :AB S → εaBa A → εb A b B → (1)试证明该文法是SLR(1) 文法,并构造SLR(1)分析表。

(2)给出输入串aa # 的分析过程。

参考答案一、简答题1、构造一个文法使其生成的语言是不允许0打头的偶正整数集合。

8|6|4|2|ABC Z → 9|8|7|6|5|4|3|2|1→A ε|0|B AB B → |8|6|4|2|0→C2、文法][E G :T T E T E E -+→,F F T F T T /*→,i E F )(→,构造句型i T T T *+-的语法树,并指出该句型的短语、直接短语、句柄、素短语和最左素短语。

短语:T ,T-T ,i ,T*i ,T-T+T*i直接短语:T , i 句柄: T素短语(P72):T-T,i 最左素短语:T-T3 某LL(1)文法的预测分析表如下,请在下述分析过程表中填入输入串( a , a )$ 的分析过程。

编译原理作业参考答案

编译原理作业参考答案
(2)
最左推导:NNDDD3D34
NNDNDDDDD5DD56D568
最右推导:NNDN4D434
NNDN8ND8N68D68568
2*.写出一个文法,使其语言是奇数集,且每个奇数是不以0开头。
答:
SCAB|B(考虑了正负号)
A1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | AA | A0 |
低级语言:机器语言和汇编语言。
高级语言:是人们根据描述实际问题的需要而设计的一个记号系统。如同自然语言(接近数学语言和工程语言)一样,语言的基本单位是语句,由符号组和一组用来组织它们成为有确定意义的组合规则。
翻译程序:能够把某一种语言程序(源语言程序)改变成另一种语言程序(目
标语言程序),后者与前者在逻辑上是等价的。其中包括:编译程序,解释程序,汇编程序。
{2,4}a = {1,0},{2,4}b = {3,5},无需划分
{3,5}a = {3,5},{3,5}b = {2,4},无需划分
{0,1}a = {1},{0,1}b = {2,4},无需划分
因此,最终的划分为:{0,1}、{2,4}和{3,5},化简后的结果:
5.(P65,14)构造一个DFA M,它接受={0,1}上所有满足如下条件的字符串:每个1都有0直接跟在右边。
T*(i+i)F*(i+i)i*(i+i)
⑵构造语法树
E最左推导构造语法树
E + T
E + T i
T i
i
3.(P36, 9)证明下面的文法是二义的:
SiSeS | iSi
答:对于句子iiiei有两棵不同的语法树。因此该文法是二义的。
SiSeSiiSeSiiieSiiiei

编译原理习题答案

编译原理习题答案

编译原理习题答案《编译原理》习题答案:第⼀次:P142、何谓源程序、⽬标程序、翻译程序、汇编程序、编译程序和解释程序?它们之间可能有何种关系?答:被翻译的程序称为源程序;翻译出来的程序称为⽬标程序或⽬标代码;将汇编语⾔和⾼级语⾔编写的程序翻译成等价的机器语⾔,实现此功能的程序称为翻译程序;把汇编语⾔写的源程序翻译成机器语⾔的⽬标程序称为汇编程序;解释程序不是直接将⾼级语⾔的源程序翻译成⽬标程序后再执⾏,⽽是⼀个个语句读⼊源程序,即边解释边执⾏;编译程序是将⾼级语⾔写的源程序翻译成⽬标语⾔的程序。

关系:汇编程序、解释程序和编译程序都是翻译程序,具体见P4 图 1.3。

P143、编译程序是由哪些部分组成?试述各部分的功能?答:编译程序主要由8个部分组成:(1)词法分析程序;(2)语法分析程序;(3)语义分析程序;(4)中间代码⽣成;(5)代码优化程序;(6)⽬标代码⽣成程序;(7)错误检查和处理程序;(8)信息表管理程序。

具体功能见P7-9。

P144、语法分析和语义分析有什么不同?试举例说明。

答:语法分析是将单词流分析如何组成句⼦⽽句⼦⼜如何组成程序,看句⼦乃⾄程序是否符合语法规则,例如:对变量 x:= y 符合语法规则就通过。

语义分析是对语句意义进⾏检查,如赋值语句中x与y类型要⼀致,否则语法分析正确,语义分析则错误。

P155、编译程序分遍由哪些因素决定?答:计算机存储容量⼤⼩;编译程序功能强弱;源语⾔繁简;⽬标程序优化程度;设计和实现编译程序时使⽤⼯具的先进程度以及参加⼈员多少和素质等等。

补充:1、为什么要对单词进⾏内部编码?其原则是什么?对标识符是如何进⾏内部编码的?答:内部编码从“源字符串”中识别单词并确定单词的类型和值;原则:长度统⼀,即刻画了单词本⾝,也刻画了它所具有的属性,以供其它部分分析使⽤。

对于标识符编码,先判断出该单词是标识符,然后在类别编码中写⼊相关信息,以表⽰为标识符,再根据具体标识符的含义编码该单词的值。

编译原理考试题及答案

编译原理考试题及答案

编译原理考试题及答案一、选择题(每题5分,共20分)1. 编译器的主要功能是什么?A. 代码优化B. 代码翻译C. 代码调试D. 代码运行答案:B2. 下列哪个选项不属于编译器的前端部分?A. 词法分析B. 语法分析C. 语义分析D. 代码生成答案:D3. 在编译原理中,文法的产生式通常表示为:A. A -> αB. A -> βC. A -> γD. A -> δ答案:A4. 下列哪个算法用于构建语法分析树?A. LL(1)分析B. LR(1)分析C. SLR(1)分析D. LALR(1)分析答案:A二、填空题(每空5分,共20分)1. 编译器的前端通常包括词法分析、语法分析和________。

答案:语义分析2. 编译器的后端主要负责________和目标代码生成。

答案:代码优化3. 编译器中的词法分析器通常使用________算法来识别单词。

答案:有限自动机4. 语法分析中,________分析是一种自顶向下的分析方法。

答案:递归下降三、简答题(每题10分,共30分)1. 简述编译器的作用。

答案:编译器的主要作用是将高级语言编写的源代码转换成计算机能够理解的低级语言或机器代码,以便执行。

2. 解释一下什么是语法制导翻译。

答案:语法制导翻译是一种翻译技术,它利用源语言的语法信息来指导翻译过程,使得翻译过程能够更好地理解源代码的语义。

3. 什么是词法分析器?答案:词法分析器是编译器前端的一部分,它的任务是将源代码文本分解成一系列的标记(tokens),这些标记是源代码的最小有意义的单位。

四、计算题(每题10分,共30分)1. 给定一个简单的文法G(E):E → E + T | TT → T * F | FF → (E) | id请计算文法的非终结符号E的FIRST集和FOLLOW集。

答案:E的FIRST集为{(, id},FOLLOW集为{), +, $}。

2. 假设编译器在进行语法分析时,遇到一个语法错误的代码片段,请简述编译器如何处理这种情况。

奥鹏14秋《编译原理》作业1满分答案

奥鹏14秋《编译原理》作业1满分答案

14秋《编译原理》作业1
一,单选题
1. ( )是把中间代码进行变换或者进行改造,目的是使生成的目标代码更为高效,即省时间和省空间。

A. 语法分析
B. 语义分析
C. 中间代码生成
D. 代码优化
E. 目标代码生成
?
正确答案:D
2. 编译程序是将高级语言程序翻译成( )。

A. 高级语言程序
B. 机器语言程序
C. 汇编语言程序
D. 汇编语言或机器语言程序
?
正确答案:D
3. 文法G 所描述的语言是_____的集合。

A. 文法G 的字母表V 中所有符号组成的符号串
B. 文法G 的字母表V 的闭包V* 中的所有符号串
C. 由文法的开始符号推出的所有终极符串
D. 由文法的开始符号推出的所有符号串
?
正确答案:C
4. 下列______优化方法不是针对循环优化进行的。

A. 强度削弱
B. 删除归纳变量
C. 删除多余运算
D. 代码外提
?
正确答案:C
5. 文法分为四种类型,即0型、1型、2型、3型。

其中0型文法是_____。

A. 短语文法
B. 正则文法
C. 上下文有关文法
D. 上下文无关文法
?。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第1章引言1、解释下列各词源语言:编写源程序的语言(基本符号,关键字),各种程序设计语言都可以作为源语言。

源程序: 用接近自然语言(数学语言)的源语言(基本符号,关键字)编写的程序,它是翻译程序处理的对象。

目标程序: 目标程序是源程序经过翻译程序加工最后得到的程序。

目标程序(结果程序)一般可由计算机直接执行。

低级语言:机器语言和汇编语言。

高级语言:是人们根据描述实际问题的需要而设计的一个记号系统。

如同自然语言(接近数学语言和工程语言)一样,语言的基本单位是语句,由符号组和一组用来组织它们成为有确定意义的组合规则。

翻译程序: 能够把某一种语言程序(源语言程序)改变成另一种语言程序(目标语言程序),后者与前者在逻辑上是等价的。

其中包括:编译程序,解释程序,汇编程序。

编译程序: 把输入的源程序翻译成等价的目标程序(汇编语言或机器语言),然后再执行目标程序(先编译后执行),执行翻译工作的程序称为编译程序。

解释程序: 以该语言写的源程序作为输入,但不产生目标程序。

按源程序中语句动态顺序逐句的边解释边执行的过程,完成翻译工作的程序称为解释程序。

2、什么叫“遍”?指对源程序或源程序的中间形式(如单词,中间代码)从头到尾扫描一次,并作相应的加工处理,称为一遍。

3、简述编译程序的基本过程的任务。

编译程序的工作是指从输入源程序开始到输出目标程序为止的整个过程,整个过程可以划分5个阶段。

词法分析:输入源程序,进行词法分析,输出单词符号。

语法分析:在词法分析的基础上,根据语言的语法规则把单词符号串分解成各类语法单位,并判断输入串是否构成语法正确的“程序”。

中间代码生成:按照语义规则把语法分析器归约(或推导)出的语法单位翻译成一定形式的中间代码。

优化:对中间代码进行优化处理。

目标代码生成:把中间代码翻译成目标语言程序。

4、编译程序与解释程序的区别?编译程序生成目标程序后,再执行目标程序;然而解释程序不生成目标程序,边解释边执行。

5、有人认为编译程序的五个组成部分缺一不可,这种看法正确吗?编译程序的5个阶段中,词法分析,语法分析,语义分析和代码生成生成是必须完成的。

而中间代码生成和代码优化并不是必不可少的。

优化的目的是为了提高目标程序的质量,没有这一部分工作,仍然能够得到目标代码。

6、编译程序的分类目前基本分为:诊断编译程序,优化编译程序,交叉编译程序,可变目标编译程序。

第2章高级语言及其语法描述1(P36)令文法为N → D∣NDD → 0∣1∣2∣⋯∣9(1)文法描述的语言L(G)是什么?(2)给出句子34,568的最左推导和最右推导。

答:(1)L(G)={α∣α为可带前导0的正整数}或L(G)={(0∣1∣2∣⋯∣9)+ }或 L(G)={α∣α为数字串}(2)最左推导:N⇒ND⇒DD⇒3D⇒34N⇒ND⇒NDD⇒DDD⇒5DD⇒56D⇒568最右推导:N⇒ND⇒N4⇒D4⇒34N⇒ND⇒N8⇒ND8⇒N68⇒D68⇒5682*.写出一个文法,使其语言是奇数集,且每个奇数是不以0开头。

答:S → CAB|B (考虑了正负号)A → 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | AA | A0 | εB → 1|3|5|7|9C → +|-|ε或:(未考虑正负号)S → B | ABB → 1 | 3 | 5 | 7 | 9A → AD | NN → 2 | 4 | 6 | 8 | BD → 0 | N或:(未考虑正负号)S → C | ABCC → 1 | 3 | 5 | 7 | 9A → 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9B → BA | B0 |ε2.(P36, 8)令文法为E → T∣E+T∣E-TT → F∣T*F∣T/FF →(E)∣i(1)给出该文法的V N、V T和S。

(2)给出i+i*i,i*(i+i)的最左推导和最右推导。

(3)给出i+i+i,i+i*i的语法树。

答:(1)V N = { E, T, F }V T = { +, -, *, /, (, ), i }S = E(2)最左推导E⇒E+T⇒T+T⇒F+T⇒i+T⇒i+T*F⇒i+F*F⇒i+i*F⇒i+i*iE⇒T⇒T*F⇒F*F⇒i*F⇒i*(E)⇒i*(E+T)⇒i*(T+T)⇒i*(F+T)⇒i*(i+T)⇒i*(i+F)⇒i*(i+i)最右推导E⇒E+T⇒E+T*F⇒E+T*i⇒E+F*i⇒E+i*i⇒T+i*i⇒F+i*i⇒i+i*iE⇒T⇒T*F⇒T*(E)⇒T*(E+T)⇒T*(E+F)⇒T*(E+i)⇒T*(T+i)⇒T*(F+i)⇒T*(i+i)⇒F*(i+i)⇒i*(i+i)⑵构造语法树E 最左推导构造语法树E + TE + T iT ii3.(P36, 9)证明下面的文法是二义的:S → iSeS | iS ∣ i答:对于句子iiiei有两棵不同的语法树。

因此该文法是二义的。

S ⇒ iSeS ⇒ iiSeS ⇒ iiieS ⇒ iiieiS ⇒ iS ⇒ iiSeS ⇒ iiieS ⇒ iiiei第3章词法分析1.设M=({x,y},{a,b},δ,x,{y})为一个非确定有限自动机NFA M,其中δ定义如下:δ(x,a)={x,y}δ(x,b)={y}δ(y,a)=φδ(y,b)={x,y}试构造其相应的最小化的确定有限自动机DFA M’。

答:由δ定义可知δ(x,a),δ(y,b)均为多值函数,所以是一个非确定有限自动机。

(1)根据δ函数值,先构造NFA M(2)确定化:①构造DFA M’的转换矩阵:I I a I b{x} ①{x,y} ②{y} ③{x,y} ②{x,y} ②{x,y} ②{y} ③{x,y} ②②确定DFA M’的初始状态和终态:(a)转换矩阵中I列的第一个状态①为DFA M’的初始状态结点。

(b)含有y状态的子集均为DFA M’的终态结点(②、③为终态结点)。

③根据DFA M’的转换矩阵画出对应的状态转换图:(3)最小化:①首先将其划分成终态集{2,3}和非终态集{1}②{2,3}a={2}⊂ {2,3}, {2,3}b={2}⊂ {2,3}因此{2,3}已是不可再区分的,所以该DFA M’已是最小化的。

2. (P64,7(1))构造正规式1(0∣1)*101相应的DFA M。

答:(1)构造NFA M。

1(0∣1)*101X Y1 (0∣1)* 1 0 11 εε 1 0 10∣11 εε 1 0 11(2I I0I1{X} ①{1, 2, 3} ②{1, 2, 3} ②{2, 3} ③{2, 3, 4} ④{2, 3} ③{2, 3} ③{2, 3, 4} ④{2, 3, 4} ④{2, 3, 5} ⑤{2, 3, 4} ④{2, 3, 5} ⑤{2, 3} ③{2, 3, 4, Y} ⑥{2, 3, 4, Y } ⑥{2, 3, 5} ⑤{2, 3, 4} ④(3)由转换矩阵构造DFA M1111111234563.(P64,12(a))将下图所示的NFA M转换为等价的DFA M’,并将该DFA’最小化。

答:该有限自动机状态0输入同一字符a时到达两个不同的结点,所以是NFA。

I I a I b{0} ①{0,1} ②{1} ③{0,1} ②{0,1} ②{1} ③{1} ③{0} ①X 31 542 YX 1 2 3 4 5 YX 3 51 4 Y((3①将DFA M的状态划分为非终态集{3}和终态集{1,2}②对每一个子集及每一个a∈∑进行考察;{1,2}a = {2} ⊂ {1,2}{1,2}b = {3} ⊆ {3}因此{1,2}是不可区分的,所以最终状态为: {1,2},{3}构造最小化的DFA M:4. (P64,12(b))将下图所示的NFA M转换为等价的DFA M’,并进行最小化。

答:从图上可知该图已经是DFA M,先只需将其最小化。

首先划分为两个集合:{0,1}和{2,3,4,5}{2,3,4,5}a = {1,3,0,5},划分为:{2,4}和{3,5}{2,4}a = {1,0},{2,4}b = {3,5},无需划分{3,5}a = {3,5},{3,5}b = {2,4},无需划分{0,1}a = {1},{0,1}b = {2,4},无需划分因此,最终的划分为:{0,1}、{2,4}和{3,5},化简后的结果:5.(P65,14)构造一个DFA M,它接受∑={0,1}上所有满足如下条件的字符串:每个1都有0直接跟在右边。

答:(1)根据题意,得到正规式:(0|10)*(2)构造对应的NFA M:(3(4)将DFA M最小化:①将DFA M的状态划分为非终态集{3}和终态集{1, 2}②对每一个子集进行考察;{1, 2}0 = {2} ⊆{1, 2}{1, 2}1 = {3,3} ⊆{3}因此{0, 1}是不可划分的。

因此最终划分结果为:{1, 2}和{3}最小化后的DFA M:第4章语法分析-自上而下1.(P81,1)考虑下面文法GS→ a∣^∣(T)T→T,S∣S(1)消除文法的左递归。

(2)经改写后的文法是否是LL(1)的?给出它的预测分析表。

答:(1)消除左递归:S → a∣^∣(T)T → ST’T’→ ,ST’| ε(2)证明改写后的文法是否是LL(1)的。

FIRST(S) = { a, ^, ( } FOLLOW(S) = {,, ), # }FIRST(T) = { a, ^, ( } FOLLOW(T) = { ) }FIRST(T’) = { , , ε } FOLLOW(T’) = { ) }①证明S→ a∣^∣(T)各侯选式的FIRST是否两两相交。

FIRST(a)⋂ FIRST(^)= φFIRST(a)⋂ FIRST(()= φFIRST(^)⋂ FIRST(()= φ②证明T’→,ST’∣ε的FIRST(T’)和FOLLOW(T’)是否相交。

FIRST(T’)⋂ FOLLOW(T’)={,,ε}⋂{ ) }= φ∴该文法是LL(1)的。

所以,改造后的文法是LL(1)文法③2.利用P76表4.1的LL(1)分析表写出表达式 (i+i)*i 的预测分析过程。

步骤符号栈输入串所用的产生式0 #E (i+i)*i#1 #E’T (i+i)*i# E→TE’2 #E’T’F (i+i)*i# T→FT’3 #E’T’)E((i+i)*i# F→(E)4 #E’T’)E i+i)*i#5 #E’T’)E`T i+i)*i# E→TE’6 #E’T’)E’T’F i+i)*i# T→FT’7 #E’T’)E’T’i i+i)*i# F→i8 #E’T’)E’T’ +i)*i#9 #E’T’)E’ +i)*i# T’→ε10 #E’T’)E’T+ +i)*i# E’→+TE’11 #E’T’)E’T i)*i#12 #E’T’)E’T’F i)*i# T→FT’13 #E’T’)E’T’i i)*i# F→i14 #E’T’)E’T’)*i#15 #E’T’)E’)*i# T’→ε16 #E’T’))*i# E’→ε18 #E’T’ *i#19 #E’T’F* *i# T’→*FT’20 #E’T’F i#21 #E’T’i i# F→i22 #E’T’ #23 #E’ # T’→ε24 # # E’→ε3. (P81,2)对下面的文法GE → TE’E’→ +E∣εT → FT’T’→ T∣εF → PF’F’→ *F’∣εP → (E)∣^∣a∣b(1)计算这个文法的每个非终结符的FIRST和FOLLOW。

相关文档
最新文档