中国石油大学,编译原理第03章、习题

合集下载

编译原理习题答案

编译原理习题答案

第一章习题解答1.解:源程序是指以某种程序设计语言所编写的程序。

目标程序是指编译程序(或解释程序)将源程序处理加工而得的另一种语言(目标语言)的程序。

翻译程序是将某种语言翻译成另一种语言的程序的统称。

编译程序与解释程序均为翻译程序,但二者工作方法不同。

解释程序的特点是并不先将高级语言程序全部翻译成机器代码,而是每读入一条高级语言程序语句,就用解释程序将其翻译成一段机器指令并执行之,然后再读入下一条语句继续进行解释、执行,如此反复。

即边解释边执行,翻译所得的指令序列并不保存。

编译程序的特点是先将高级语言程序翻译成机器语言程序,将其保存到指定的空间中,在用户需要时再执行之。

即先翻译、后执行。

2.解:一般说来,编译程序主要由词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、代码优化程序、目标代码生成程序、信息表管理程序、错误检查处理程序组成。

3.解:C语言的关键字有:auto break case char const continue default do doubleelse enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while。

上述关键字在C语言中均为保留字。

4.解:C语言中括号有三种:{},[],()。

其中,{}用于语句括号;[]用于数组;()用于函数(定义与调用)及表达式运算(改变运算顺序)。

C语言中无END关键字。

逗号在C语言中被视为分隔符和运算符,作为优先级最低的运算符,运算结果为逗号表达式最右侧子表达式的值(如:(a,b,c,d)的值为d)。

第二章习题解答1.(1)答:26*26=676(2)答:26*10=260(3)答:{a,b,c,...,z,a0,a1,...,a9,aa,...,az,...,zz,a00,a01,...,zzz},共26+26*36+26*36*36=34658个2.构造产生下列语言的文法(1){anbn|n≥0}解:对应文法为G(S) = ({S},{a,b},{ S→ε| aSb },S)(2){anbmcp|n,m,p≥0}解:对应文法为G(S) = ({S,X,Y},{a,b,c},{S→aS|X,X→bX|Y,Y→cY|ε},S)(3){an # bn|n≥0}∪{cn # dn|n≥0}解:对应文法为G(S) = ({S,X,Y},{a,b,c,d,#}, {S→X, S→Y,X→aXb|#,Y→cYd|# },S) (4){w#wr# | w?{0,1}*,wr是w的逆序排列}解:G(S) = ({S,W,R},{0,1,#}, {S→W#, W→0W0|1W1|# },S)(5)任何不是以0打头的所有奇整数所组成的集合解:G(S) = ({S,A,B,I,J},{-,0,1,2,3,4,5,6,7,8,9},{S→J|IBJ,B→0B|IB|e, I→J|2|4|6|8, Jà1|3|5|7|9},S)(6)所有偶数个0和偶数个1所组成的符号串集合解:对应文法为 S→0A|1B|e,A→0S|1C B→0C|1S C→1A|0B3.描述语言特点(1)S→10S0S→aAA→bAA→a 解:本文法构成的语言集为:L(G)={(10)nabma0n|n, m≥0}。

编译原理课后习题答案

编译原理课后习题答案

(a) 0 ( 0 | 1)* 0
由0和1组成且以0开始和结束的符号串全体. (b) ( ( | 0 ) 1* ) * 由0和1组成的符号串全体.
(c) ( 0 | 1 )* 0 ( 0 | 1) ( 0 | 1) 由0和1组成且以000,001,010或011结束的符号串全体. 长度大于等于3且倒数第3个字符为0的01符号串全体.
R R ‘|’ S | S S ST | T T U* | U U (R) | a | b
a
a
a
28
4.5 dangling-else文法: stmt if expr then stmt | matched-stmt matched-stmt if expr then matched-stmt else stmt | other 试说明此文法是二义性的。 句子 if e1 then if e2 then s1 else if e3 then s2 else s3 if e1 then if e2 then s1 else if e3 then s2 else s3
0|1 B 1 D E 0 ABDE ABDE ABCDE ABDE 1 ABCDE ABCDE
start
A
1
C
NFA 0
start A' 1
0
B'
0
1
start
A'
1
最小化DFA
24
DFA
3.8 给定右线性文法G: S 0S | 1S | 1A | 0B A 1C |1 B 0C | 1 C 0C | 1C | 0 | 1 试求一个等价的左线性文法G’.
20
3.6 给出接受下列在字母表{0,1}上的DFA。 (a)所有以00结束的符号串的集合; (1|0)*00

编译原理第三章练习题答案

编译原理第三章练习题答案

编译原理第三章练习题答案编译原理第三章练习题答案编译原理是计算机科学中的重要学科,它研究的是如何将高级语言代码转化为机器语言的过程。

在编译原理的学习过程中,练习题是不可或缺的一部分,通过完成练习题可以更好地理解和掌握编译原理的知识。

本文将为大家提供编译原理第三章练习题的答案,希望对大家的学习有所帮助。

1. 什么是语法分析?语法分析是编译器中的一个重要模块,它的主要任务是根据给定的语法规则,对输入的源代码进行分析和解释。

语法分析器会根据语法规则构建一个语法树,用于表示源代码的结构和含义。

常用的语法分析方法有递归下降法、LL(1)分析法和LR分析法等。

2. 什么是LL(1)文法?LL(1)文法是一种特殊的上下文无关文法,它具有以下两个特点:(1) 对于任何一个句子,最左推导和最右推导是唯一的。

(2) 在预测分析过程中,只需要向前看一个输入符号就可以确定所采用的产生式。

LL(1)文法是一种常用的文法形式,它适用于递归下降法和LL(1)分析法。

3. 什么是FIRST集合和FOLLOW集合?FIRST集合是指对于一个文法符号,它能够推导出的终结符号的集合。

FOLLOW 集合是指在一个句型中,某个非终结符号的后继终结符号的集合。

计算FIRST集合和FOLLOW集合可以帮助我们进行语法分析,特别是LL(1)分析。

4. 什么是递归下降语法分析法?递归下降语法分析法是一种基于产生式的自顶向下的语法分析方法。

它的基本思想是从文法的开始符号开始,递归地根据产生式进行分析,直到推导出输入符号串或发现错误。

递归下降语法分析法的实现比较简单,但对于某些文法可能会出现回溯现象,影响分析效率。

5. 什么是LR分析法?LR分析法是一种自底向上的语法分析方法,它的基本思想是从输入符号串开始,逐步构建语法树,直到推导出文法的开始符号。

LR分析法具有较好的分析效率和广泛的适用性,常用的LR分析方法有LR(0)、SLR(1)、LR(1)和LALR(1)等。

(完整版)编译原理习题及答案(整理后)

(完整版)编译原理习题及答案(整理后)

8、规范推导是最左推导,故选 d。
9、由 T→T,…和 T→(… 得 FIRSTVT(T))={(,,)};
由 T→S 得 FIRSTVT(S)⊂FIRSTVT(T),而 FIRSTVT(S)={b,∧,(};即
FIRSTVT(T)={b,∧,(,,};
因此选 c。
10、d 11、c 12、b 13、b 14、b
标语言
第二章
一、单项选择题
1、文法 G:S→xSx|y 所识别的语言是 。
a. xyx
b. (xyx)* c. xnyxn(n≥0) d. x*yx*
2、文法 G 描述的语言 L(G)是指 。
a. L(G)={α|S⇒+ α , α∈VT*}
b. L(G)={α|S⇒* α, α∈VT*}
c. L(G)={α|S⇒* α,α∈(VT∪VN*)} d. L(G)={α|S⇒+ α, α∈(VT∪VN*)}
6、一个文法所有句型的集合形成该文法所能接受的语言。
五、简答题
1、句柄 2、素短语
3、语法树
4、归约
六、问答题
1、给出上下文无关文法的定义。
2、文法 G[S]:
() () () () ()
5、推导
S→aSPQ|abQ
QP→PQ
bP→bb
bQ→bc
cQ→cc (1)它是 Chomsky 哪一型文法? (2)它生成的语言是什么? 3、按指定类型,给出语言的文法。 L={aibj|j>i≥1}的上下文无关文法。 4、有文法 G:S→aAcB|Bd
a. 23 B. 42 c. 30 14、规范归约指 。
d. 17
a. 最左推导的逆过程
b. 最右推导的逆过程

编译原理(第三版)第3章课后练习及参考答案中石大版

编译原理(第三版)第3章课后练习及参考答案中石大版

第3章练习P47作业布置:P47 4 ,9,11,14(1)4、已知文法G[Z]:(1)Z::=aZb (2)Z::=ab写出L(G[Z])的全部元素解:L(G[Z])={a n b n,n>=1}9、考虑下面的上下文无关文法:S→SS* | SS+ | a(1)表明通过此文法如何生成串aa+a*,并为该串构造语法树(2)该文法生成的语言是什么?解:(1)推导过程见语法树。

语法树如下(2)该文法生成的语言为用递归逆波兰式表示的运算式。

逆波兰式是将运算对象写在前面,把运算符写在后面。

11、G[E]:E→T|E+T|E-TT→F|T*F|T/FF → (E)|i证明E+T*F 是它的一个句型,指出这个句型的所有短语、直接短语和句柄。

解:可为E+T*F 构造一棵语法树(见下图),所以它是句型。

从语法树中容易看出,E+T*F 的短语有:T*F 是句型E+T*F 的相对于T 的短语,也是相对于规则T →T*F 的直接短语。

E+T*F 是句型E+T*F 的相对于E 的短语。

句型E+T*F 的句柄(最左直接短语)是T*F 。

14、给出生成下述语言的上下文无关文法:(1){a n b n a m b m |n,m>=0}(2){1n 0m 1m 0n |n,m>=0}(3){WaW r |W 属于{0|a}*,W r 表示W 的逆}解:(1)所求文法为G[S]=({S,A},{a,b},P,S),其中P 为:S →AA A →aAb|ε (2)所求文法为G[S]=({S,A},{0,1},P,S),其中P 为: S →1S0|AA →0A1|ε(3)W 属于{0|a}*是指W 可以的取值为{ε,0,a,00,a0,aa0,00aa,a0a0,…}E E + T T * F如果W=aa0a00,则W r=00a0aa。

所求文法为G[S]=({S,P,Q},{0,a},P,S),其中P为:S 0S0|aSa|a。

编译原理部分课后答案,仅供参考

编译原理部分课后答案,仅供参考

第一章编译程序概述1.1什么是编译程序编译程序是现代计算机系统的基本组成部分之一,而且多 数计算机系统都含有不止一个高级语言的编译程序。

对有些高 级语言甚至配置了几个不同性能的编译程序。

1.2编译过程概述和编译程序的结构编译程序完成从源程序到目标程序的翻译工作,是一个复 杂的整体的过程。

从概念上来讲,一个编译程序的整个工作过 程是划分成阶段进行的,每个阶段将源程序的一种表示形式转 换成另一种表示形式,各个阶段进行的操作在逻辑上是紧密连 接在一起的。

一般一个编译过程划分成词法分析、语法分析、 语义分析、中间代码生成,代码优化和目标代码生成六个阶段,这是一种典型的划分方法。

事实上,某些阶段可能组合在一起, 这些阶段间的源程序的中间表示形式就没必要构造岀来了。

我 们将分别介绍各阶段的任务。

另外两个重要的工作:表格管理 和岀错处理与上述六个阶段都有联系。

编译过程中源程序的各 种信息被保留在种种不同的表格里,编译各阶段的工作都涉及 到构造、查找或更新有关的表格,因此需要有表格管理的工作; 如果编译过程中发现源程序有错误,编译程序应报告错误的性 质和错误发生的地点,并且将错误所造成的影响限制在尽可能 小的范围内,使得源程序的其余部分能继续被编译下去,有些 编译程序还能自动校正错误, 这些工作称之为岀错处理。

图1.3表示了编译的各个阶段。

图1.3编译的各个阶段它不生成目标代码,它每遇到一个语句,就要对这个语句进行 分析以决定语句的含义,执行相应的动作。

右面的图示意了它 的工作机理第二章:PL/O 编译程序问答第1题 PL/0语言允许过程嵌套定义和递归调用,试问 它的编译程序如何解决运行时的存储管理。

答:PL/0语言允许过程嵌套定义和递归调用,它的编译程序在运行时采用了栈式动态存储管理。

(数组CODE 存放的只读目 标程序,它在运行时不改变。

)运行时的数据区S 是由解释程序 定义的一维整型数组,解释执行时对数据空间S 的管理遵循后进先岀规则,当每个过程(包括主程序)被调用时,才分配数据 空间,退出过程时,则所分配的数据空间被释放。

编译原理第3章习题解答

编译原理第3章习题解答

第3章习题解答1.构造正规式‎1(0|1)*101相应‎的D FA.[答案]先构造NF‎A确定化============================================================== 2.将下图确定‎化:[答案]E‎、Z为F。

转化为DF‎A:================================================================ 3.把下图最小‎化:[答案](1)初始分划得‎Π0:终态组{0},非终态组{1,2,3,4,5}对非终态组‎进行审查:{1,2,3,4,5}a {0,1,3,5}而{0,1,3,5}既不属于{0},也不属于{1,2,3,4,5} ∵{4} a {0},所以得新分‎划 (2)Π1:{0},{4},{1,2,3,5} 对{1,2,3,5}进行审查: ∵{1,5} b {4}{2,3} b {1,2,3,5},故得新分划‎ (3)Π2:{0},{4},{1, 5},{2,3} {1, 5} a {1, 5}{2,3} a {1,3},故状态2和‎状态3不等‎价,得新分划 (3)Π3:{0},{2},{3},{4},{1, 5} 这是最后分‎划了 (4)最小DFA ‎:======================================= 4.构造一个D ‎F A ,它接收Σ={0,1}上所有满足‎如下条件的‎字符串:每个1都有‎0直接跟在‎右边。

并给出该语‎言的正规式‎和正规文法‎。

[答案]按题意相应‎的正规表达‎式是0*(100*)*0* 构造相应的‎D F A ,首先构造N ‎F A 为用子集法确‎定化可最小化,终态组为G ‎1={C, D},非终态组为‎G 2={S, A, B} 对于G2分‎析:f(S,0)=A, f(A,0)=A, 后继状态均‎属于G2 而f(B,0)=C, 后继状态属‎于G 1 将G2分割‎成G 21={S ,A}, G22={B}经检查DF‎A最小状态‎集有三个,可用S、B、D表示。

编译原理-第3章 词法分析--习题答案

编译原理-第3章 词法分析--习题答案

第3章词法分析习题答案1.判断下面的陈述是否正确。

(1)有穷自动机接受的语言是正规语言。

(√)(2)若r1和r2是Σ上的正规式,则r1|r2也是Σ上的正规式。

(√)(3)设M是一个NFA,并且L(M)={x,y,z},则M的状态数至少为4个。

(× )(4)设Σ={a,b},则Σ上所有以b为首的符号串构成的正规集的正规式为b*(a|b)*。

(× )(5)对任何一个NFA M,都存在一个DFA M',使得L(M')=L(M)。

(√)(6)对一个右线性文法G,必存在一个左线性文法G',使得L(G)=L(G'),反之亦然。

(√) (7)一个DFA,可以通过多条路识别一个符号串。

(× )(8)一个NFA,可以通过多条路识别一个符号串。

(√)(9)如果一个有穷自动机可以接受空符号串,则它的状态图一定含有 边。

(× )(10)DFA具有翻译单词的能力。

(× )2.指与出正规式匹配的串.(1)(ab|b)*c 与后面的那些串匹配?ababbc abab c babc aaabc(2)ab*c*(a|b)c 与后面的那些串匹配? acac acbbc abbcac abc acc(3)(a|b)a*(ba)* 与后面的那些串匹配? ba bba aa baa ababa答案(1) ababbc c babc(2) acac abbcac abc(3) ba bba aa baa ababa3. 为下边所描述的串写正规式,字母表是{0, 1}.(1)以01 结尾的所有串(2)只包含一个0的所有串(3) 包含偶数个1但不含0的所有串(4)包含偶数个1且含任意数目0的所有串(5)包含01子串的所有串(6)不包含01子串的所有串答案注意 正规式不唯一(1)(0|1)*01(2)1*01*(3)(11)*(4)(0*10*10*)*(5)(0|1)*01(0|1)*(6)1*0*4.请描述下面正规式定义的串. 字母表{x, y}.(1) x(x|y)*x(2)x*(yx)*x*(3) (x|y)*(xx|yy) (x|y)*答案(1)必须以 x 开头和x结尾的串(2)每个 y 至少有一个 x 跟在后边的串 (3)所有含两个相继的x或两个相继的y的串5.处于/* 和 */之间的串构成注解,注解中间没有*/。

编译原理第3章 习题

编译原理第3章 习题

E
E → T | E+T | E-T T → F | T*F | T/F F → ( E ) | i
E
+
T
短语
E+T*F、T*F 直接短语 T*F 句柄 T*F
T
*
F

作业3.12 下述文法G[E]生成的语言是什么? 给出该文法的一个句子,该句子至少包含5个终 结符,构造该句子的语法树。 证明:<E><T><F><MOP><POP>是G[<E>]的 句型,并指出该句型的所有短语、直接短语和 句柄
S→aSPQ | abQ QP→PQ bP→bb bQ→bc cQ→cc

练习题
练习3.1

文法G:S→xSx|y所识别的语言是
语言 所有句子的集合称为语言。设 G是给的文法,S是开始符,则由文 法G所定义的语言L(G)可描述如下: L(G)={x| S *x, xVT*} 正规集 正规式所能描述出的所有符 号串,本质上讲就是该正规式所表示 的所有语言,记为L(e)
项 因子
(
表达式 +
)
表达式 项 因子 i
项 因子 i
作业3.6 已知文法,给出下述表达式的推 导及语法树
(5)i+(i+i)
<表达式> <表达式>+<项> <项>+<项> <因子>+<项> i+<项> i+<因子> i+(<表达式>) i+(<表达式>+<项>) i+(<项>+<项>) i+(<因子>+<项>) i+(i+<项>) i+(i+<因子>) i+(i+i)

中国石油大学,编译原理第03章、文法和语言

中国石油大学,编译原理第03章、文法和语言
词> ,那ห้องสมุดไป่ตู้得到:
<主语> <谓语> <代词> <谓语>
6
汉语描述规则导出过程
依此类推,句子“我是大学生”的全部导出过 程是: <句子> <主语><谓语> <代词><谓语> 我<谓语> 我<动词><直接宾语> 我是<直接宾语> 我是<名词> 我是大学生
23
例: 文法G=(VN,VT,P,S) VN = { S } VT ={ 0, 1 } P={ S→0S1, S→01 }
S为开始符号
24
例: 文法G=(VN,VT,P,S)
VN ={标识符,字母,数字}
VT ={a,b,c,…x,y,z,0,1,…,9}
P={<标识符>→<字母>
<标识符>→<标识符><字母>
语法描述。(严谨、简洁、易读)
形式工具——形式语言,抽象地定义为一个 数学系统。 “形式”是指这样的事实:语言的所有规则 只以什么符号串能出现的方式来陈述。
2
本章知识点(内容)
引言和预备知识
文法和语言的形式定义
文法的类型
上下文无关文法及其语法树
上下文无关文法的句型分析
有关文法实用中的一些说明
L1(L1M1)*={所有字母打头的字母和数字符号串}
20
3.3 文法和语言的形式定义
一、如何来描述一种语言
如果语言是有穷的(只含有有穷多个句子),可以将句子 逐一列出来表示
如果语言是无穷的,找出语言的有穷表示。语言的有穷表 示有两个途经: 1. 生成方式 (文法):语言中的每个句子可以用严格定 义的规则来构造。

编译原理第三章习题讲解

编译原理第三章习题讲解

词法分析器的实现
实现词法分析器可以采用工具如Lex或Flex,这些工具可以根据词法规则自动生成相 应的词法分析器代码。
也可以手动编写词法分析器的代码,但需要熟练掌握正则表达式和有限自动机等相 关知识。
在实现过程中,需要注意处理输入缓冲区的管理、记号的输出和错误处理等问题。
02
习题二:语法分析
语法分析概述
03
中间代码生成的方法
包括解析、语义分析和控制流分析等步骤,最终将源代码转换为中间代
码。
代码优化技术
代码优化概述
通过各种技术手段对中间代码进行优化,以提高目标 代码的执行效率。
常见的代码优化技术
包括常量折叠、死代码消除、循环展开、内联函数等。
代码优化策略
根据程序特性和系统环境选择合适的优化策略,以达 到最佳的优化效果。
3
词法分析器通常采用正则表达式或有限自动机来 实现。
词法分析算法
01
词法分析算法通常采用“自顶向下”的分词方法,即从源代码 的开头开始,逐步识别出各个记号。
02
常用的分词算法有正向最大匹配法、逆向最大匹配法和双向最
大匹配法等。
在词法分析过程中,需要特别注意处理源代码中的注释、字符
03
串文字和符号文字等特殊情况。
03
实现过程中还需要注意处理各 种语法错误和异常情况,以确 保语法分析的正确性和可靠性 。
03
习题三:语义分析
语义分析概述
语义分析是编译过程的核心环 节之一,主要负责对源程序的 语法结构进行分析,并检查其
语义是否合法。
语义分析的目的是在语法分 析的基础上,进一步确定源 程序中各个语句的含义,以
及它们之间的关系。
编译器设计实践概述

编译原理习题及答案1~3

编译原理习题及答案1~3
D.高级语言接近人们的自然语言,但其依赖具 体机器的特性是无法改变的
2021/10/10
2
《遍”是为了 。
A.提高程序的执行效率
B.使程序的结构更加清晰
C.利用有限的机器内存并提高机器的执行效率
D.利用有限的机器内存但降低了机器的执行效

(3) 构造编译程序应掌握 。
表2-1 状态转换矩阵
I
Ia
Ib
{x}
{x,y}
{y}
{y}

{x,y}
{x,y}
{x,y}
{x,y}
将转换矩阵中的所有子集重新命名,形成表2-2所 示的状态转换矩阵,即得到
S
a
b
0
2
1
1

2
2
2
2
2021/10/10
21
《编译原理教程》习题解析
22
其状态转换图如图2-3所示。
图2-3 习题2.3的DFA M′
(8) 由于正则闭包R+=R*R=RR*,故 (a|b)*(a|b)=(a|b)(a|b)*。故选A。
2021/10/10
17
《编译原理教程》习题解析
18
2.2 什么是扫描器?扫描器的功能是什么? 【解答】 扫描器就是词法分析器,它接受输 入的源程序,对源程序进行词法分析并识别出一 个个单词符号,其输出结果是单词符号,供语法 分析器使用。通常把词法分析器作为一个子程序, 每当语法分析器需要一个单词符号时就调用这个 子程序。每次调用时,词法分析器就从输入串中 识别出一个单词符号交给语法分析器。
4
《编译原理教程》习题解析
5
【解答】 (1) 编译程序可以将用高级语言编写的源程序转换成 与之在逻辑上等价的目标程序,而目标程序可以是汇编语 言程序或机器语言程序。故选A。 (2) 分多遍完成编译过程可使整个编译程序的逻辑结 构更加清晰。故选B。 (3) 构造编译程序应掌握源程序、目标语言和编译方 法这三方面内容。故选D。

编译原理习题及答案(整理后)

编译原理习题及答案(整理后)

编译原理习题及答案(整理后)第一章1、将编译程序分成若干个“遍”是为了b.使程序的结构更加清晰2、构造编译程序应掌握a.源程序b.目标语言c.编译方法3、变量应当c.既持有左值又持有右值4、编译程序绝大多数时间花在上。

d.管理表格5、不可能是目标代码。

d.中间代码6、使用可以定义一个程序的意义。

a.语义规则7、词法分析器的输入是b.源程序8、中间代码生成时所遵循的是-c.语义规则9、编译程序是对d.高级语言的翻译10、语法分析应遵循c.构词规则二、多项选择题1、编译程序各阶段的工作都涉及到b.表格管理c.出错处理2、编译程序工作时,通常有阶段。

a.词法分析三、填空题b.语法分析c.中间代码生成e.目标代码生成1、解释程序和编译程序的区别在于是否生成目标程序2、编译过程通常可分为5个阶段,分别是词法分析、语法分析中间代码生成、代码优化和目标代码生成。

3、编译程序工作过程中,第一段输入是源程序,最后阶段的输出为标代码生成程序。

4、编译程序是指将源程序程序翻译成目标语言程序的程序。

一、单项选择题1、文法G:S→某S某|y所识别的语言是a.某y某b.(某y某)某c.某ny某n(n≥0)d.某某y某某2、文法G描述的语言L(G)是指α,α∈VT某}a.L(G)={α|S+某α,α∈V某}b.L(G)={α|ST某α,α∈(V∪V某)}d.L(G)={α|S+α,α∈(V∪V某)}c.L(G)={α|STNTN3、有限状态自动机能识别a.上下文无关文法c.正规文法b.上下文有关文法d.短语文法4、设G为算符优先文法,G的任意终结符对a、b有以下关系成立a.若f(a)>g(b),则a>bc.a~b都不一定成立b.若f(a)5、如果文法G是无二义的,则它的任何句子αa.最左推导和最右推导对应的语法树必定相同b.最左推导和最右推导对应的语法树可能不同c.最左推导和最右推导必定相同d.可能存在两个不同的最左推导,但它们对应的语法树相同6、由文法的开始符经0步或多步推导产生的文法符号序列是a.短语b.句柄c.句型d.句子7、文法G:E→E+T|TT→T某P|PP→(E)|I则句型P+T+i的句柄和最左素短语为a.P+T和ib.P和P+Tc.i和P+T+id.P和T8、设文法为:S→SA|AA→a|b则对句子aba,下面是规范推导。

编译原理答案(部分)

编译原理答案(部分)

在读入输入符号 a 后,状态 2 和 4 分别转换为第一个子集中的状态 1 和 0,状态 3 和 5
分别转换为第二个状态中的 3 和 5,这就意味着{2, 4}中的状态和{3, 5}中的状态在读
入 a 后到达了不等价的状态,因此得到了新的划分 P1 如下:
P1 = {{0, 1}, {2, 4}, {3, 5}}
ε_closure(smove(C, b)) = {0} ,A
DFA 如图:
a,b
AaB
bb
最小化 DFA 过程:
C
初始划分为:{{A, B}, {C}};
C 自身一组,不能再分;AB 在一组,查看它们的状态转移:
move(A, a) = B
move(A, b) = C
move(B, a) = B
move(B, b) = B
FO(T)= ; F(P) ∩ FO(P)= ;即可)
因此,文法 G 是 LL(1)文法。
(3)文法 G 的预测分析表如下:

Ù
a
b
+
*
)
; F(T) ∩ #
E
E"
E"
E"
E"
TE
TE
TE
TE
E
E"
E" ε E" ε
+E
T
T"
T"
T"
T"
FT
FT
FT
FT
T
T" T T" T T" T T" T T" ε
0
#Expr
VarTail" ε

编译原理教程-课后习题答案第三章语法分析

编译原理教程-课后习题答案第三章语法分析

由 A′→ABl 得 FIRST(′l′) FOLLOW(B) , 即 FOLLOW(B)={l};
由 A→aA′ 得 FOLLOW(A) FOLLOW(A′) , 即 FOLLOW(A′)={#,d};
第三章 语法分析
由 B→dB′ 得 FOLLOW(B) FOLLOW(B′) , 即 FOLLOW(B′)={l}。
c. 最左推导和最右推导必定相同
d. 可能存在两个不同的最左推导,但它们对应的语法树 相同
第三章 语法分析
(3) 采用自上而下分析,必须 。
a. 消除左递归
b. 消除右递归
c. 消除回溯
d. 提取公共左因子
(4) 设a、b、c是文法的终结符,且满足优先关系 ab和bc,则 。
a. 必有ac
b. 必有ca
第三章 语法分析
(2) 为了构造字母表Σ ={a,b}上同时只有奇数个a 和奇数个b的所有串集合的正规式,我们画出如图3-3 所示的DFA,即由开始符S出发,经过奇数个a到达状态 A,或经过奇数个b到达状态B;而由状态A出发,经过 奇数个b到达状态C(终态);同样,由状态B出发经过奇 数个a到达终态C。
第三章 语法分析
第三章 语法分析
3.1 完成下列选择题:
(1) 文法G:S→xSx|y所识别的语言是 。
a. xyx
b. (xyx)*
c. xnyxn(n≥0)
d. x*yx*
(2) 如果文法G是无二义的,则它的任何句子α 。
a. 最左推导和最右推导对应的语法树必定相同
b. 最左推导和最右推导对应的语法树可能不同
“A→α · ”动作的一定是 。
a. LALR文法 b. LR(0)文法
c. LR(1)文法 d. SLR(1)文法

编译原理第三版课后习题答案

编译原理第三版课后习题答案

目录P36-62P36-72P36-82P36-93P36-103P36-113P64–74P64–85P64–125 P64–147 P81–18P81–29P81–312 P133–112 P133–212 P133–314 P134–515 P164–518 P164–719 P217–119 P217–319 P218–420 P218–521 P218–621 P218–722 P219–1222 P270–924P36-6(1)L G ()1是0~9组成的数字串(2)最左推导:N ND NDD NDDD DDDD DDD DD D N ND DD D N ND NDD DDD DD D ⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒0010120127334556568最右推导:N ND N ND N ND N D N ND N D N ND N ND N D ⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒77272712712701274434886868568P36-7G(S)O N O D N S O AO A AD N→→→→→1357924680|||||||||||P36-8文法:E T E T E T TF T F T F F E i→+-→→|||*|/()| 最左推导:E E T T TF 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 i F T i i T i i F i i i ⇒+⇒+⇒+⇒+⇒+⇒+⇒+⇒+⇒⇒⇒⇒⇒⇒+⇒+⇒+⇒+⇒+⇒+********()*()*()*()*()*()*()最右推导:E E T E TF E T i E F i E i i T i i F i i i i i E T F T F F F E F E T F E F F E i F T i F F i F i i i i i ⇒+⇒+⇒+⇒+⇒+⇒+⇒+⇒+⇒⇒⇒⇒⇒+⇒+⇒+⇒+⇒+⇒+⇒+**********()*()*()*()*()*()*()*()语法树:/********************************EE FTE +T F F T +iiiEEFTE-T F F T -iiiEEFT+T F FTiii*i+i+ii-i-ii+i*i*****************/P36-9句子iiiei 有两个语法树:S iSeS iSei iiSei iiiei S iS iiSeS iiSei iiiei ⇒⇒⇒⇒⇒⇒⇒⇒P36-10/**************)(|)(|S T TTS S →→***************/P36-11/*************** L1:ε||cC C ab aAb A AC S →→→ L2:bcbBc B aA A AB S ||→→→εL3:εε||aBb B aAb A AB S →→→ L4:AB B A A B A S |01|10|→→→ε ***************/第三章习题参考答案P64–7(1)101101(|)*确定化:最小化:{,,,,,},{}{,,,,,}{,,}{,,,,,}{,,,}{,,,,},{},{}{,,,,}{,,}{,,,},{},{},{}{,,,}{,01234560123451350123451246012345601234135012345601231010==== 3012312401234560110112233234012345610101}{,,,}{,,}{,},{,}{},{},{}{,}{}{,}{,}{,}{}{,}{}{},{},{,},{},{},{}=====P64–8(1)01)0|1(*(2))5|0(|)5|0()9|8|7|6|5|4|3|2|1|0)(9|8|7|6|5|4|3|2|1(*(3)******)110|0(01|)110|0(10P64–12(a)确定化:给状态编号:最小化:{,},{,}{,}{}{,}{}{,}{,}{,}{}{,},{},{}012301101223032330123a ba b ====a(b)已经确定化了,进行最小化最小化:{{,}, {,,,}}012345011012423451305234523452410243535353524012435011012424{,}{}{,}{,}{,,,}{,,,}{,,,}{,,,}{,}{,}{,}{,}{,}{,}{,}{,}{{,},{,},{,}}{,}{}{,}{,}{,}a b a b a b a b a b a =============={,}{,}{,}{,}{,}{,}{,}10243535353524 b a baP64–14(2):(|εε给状态编号:最小化:{,},{,}{,}{}{,}{}{,}{,}{,}{}{,},{},{}0123011012231323301230101====第四章P81–1(1) 按照T,S 的顺序消除左递归ε|,)(||^)(T S T TS T T a S S G '→''→→' 递归子程序: procedure S; beginif sym='a' or sym='^' then abvance else if sym='('then beginadvance;T;if sym=')' then advance;else error;endelse errorend;procedure T;beginS;'Tend;procedure 'T;beginif sym=','then beginadvance;S;'Tendend;其中:sym:是输入串指针IP所指的符号advance:是把IP调至下一个输入符号error:是出错诊察程序(2)FIRST(S)={a,^,(}FIRST(T)={a,^,(}FIRST('T)={,,ε}FOLLOW(S)={),,,#}FOLLOW(T)={)}FOLLOW('T)={)}预测分析表是LL(1)文法P81–2文法:|^||)(|*||b a E P F F F P F T T T F T E E E T E →'→''→→''→+→''→εεε(1)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,^,+,),#} (2)考虑下列产生式:'→+'→'→'→E E T T F F P E a b ||*|()|^||εεεFIRST(+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)文法.(4)procedure E;beginif sym='(' or sym='a' or sym='b' or sym='^' then begin T; E' endelse errorendprocedure E';beginif sym='+'then begin advance; E endelse if sym<>')' and sym<>'#' then error endprocedure T;beginif sym='(' or sym='a' or sym='b' or sym='^' then begin F; T' endelse errorendprocedure T';beginif sym='(' or sym='a' or sym='b' or sym='^' then Telse if sym='*' then errorendprocedure F;beginif sym='(' or sym='a' or sym='b' or sym='^' then begin P; F' endelse errorendprocedure F';beginif sym='*'then begin advance; F' endendprocedure P;beginif sym='a' or sym='b' or sym='^'then advanceelse if sym='(' thenbeginadvance; E;if sym=')' then advance else error endelse errorend;P81–3/***************(1) 是,满足三个条件。

编译原理第3章课后习题答案

编译原理第3章课后习题答案

(2)将(a*|b*)*转换成 DFA NFA:
A: ε-closure(0)={0,1,2,3,5,6,7,9,10,11}; B: ε-closure(move(A,a))= ε-closure(4)={1,2,3,4,5,6,7,9,10,11} C: ε-closure(move(A,b))= ε-closure(8)={1,2,3,5,6,7,8,9,10,11} ε-closure(move(B,a))=B ε-closure(move(C,a))=B DFA 如下: ε-closure(move(B,b))=C; ε-closure(move(C,b))=C;
(3) (a|b)* a(a|b)(a|b) 答: 倒数第 3 个符号为 a 的长度大于等于 3 的 a,b 串 (4)a*ba*ba*ba* 答: 有且仅有三个 b 的由 a 和 b 构成的所有串的集合。
3.2.5 : 试写出下列语言的正则定义: (1)包含 5 个元音的所有小写字母串,这些串中的元音按顺序出现 e.g. :{ aeiou, xaxeiou, xaxabcxeeiioouu... }
3) ( ( |a)b*)* 解:1’按以下步骤: 1. 子表达式 r1,即表达式 ; 2. r2,即第一个 a; 3. r3 =r1 | r2; 4. r4=(r3); 5. r5, 即第一个 b; 6. r6=(r5)*; 7. r7=r4 r6; 8. r8=(r7); 9. r9=(r8)*. 得到的正则表达式转 NFA 为:
编译原理第22案版参考习题答案33章第第33章章词法分析322试描述下列正则表达式定义的语言1aaba答
编译原理第 2 版参考习题答案 (3 章) 第 3 章 词法分析 3.2.2 试描述下列正则表达式定义的语言 (1) a( a|b )*a 答: { aa, aaa, aba, aaaa, aaba, abaa, abba, ... },(按穷举法) 或以 a 开头和结尾,长度大于等于 2 的 a,b 串 (2) ( (ε|a)b*) )* 答: 由 a 和 b 组成的任意符号串 (自然语言描述)
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2. 已知一个文法,确定该文法所定义的 语言。 (1) 文法所定义的语言 * x且x∈VT*} L(G[S])={x|S (2) 给定一个文法,可根据语言和推导定 义推导出文法的句子,从而确定出该文法 所定义的语言。
(3) 语言可用 ①自然语言描述。 例如, L={x|x∈{a,b}+且x中a,b个数相同} ②式子描述。例如 L={a2nbb | n≥0}。
分析 根据语言句子的结构特征,设计 出相应规则
W={ε,0, 1 ,01, 10, 00, 11, 101, 110, 100, 111, …} L={a, 0a0, 1a1, 01a10, 10a01, 00a00, 11a11, 101a101, 110a011, 100a001, …}
P : S → a | 0S0 | 1S1
4.文法二义性的判断
一个文法存在某个句子对应两棵不 同的语法树或对应两个不同的最左(最 右)推导,则该文法是二义性的。
例1 设有文法G[S]: S→iSeS| iS | i
试证明文法G[S]有二义性。
分析 因为对文法的句子 iiiei 有如下两 棵不同的语法树与之对应,所以该文法 是二义的
S→iSeS| iS | i 句子 iiiei 对应下面两颗语法树: S S
3. 求句型的短语、直接短语和句柄 (1) 短语、直接短语和句柄是对某句 型而言的。 (2) 短语总是句型的某个子串,它对应 子树未端结点形成的符号串。
(3) 直接短语是某条规则右部,它对应 简单子树未端结点形成的符号串。 (4) 最左边的直接短语是句柄。
E→E+T | E-T | T T→T*F | T/F | F F→(E) | i 证明 E+T*F是它的一个句型,指出这个句 型的短语﹑直接短语和句柄。 ∵ EE+TE+T*F 画出该句型的语 ∴ E+T*F是它的一个句型。法树: E 短语: E+T*F、T*F E T + 直接短语: T*F T * F 句柄: T*F 例 1 已知文 法G[E]:
N→SE | E S→SD | D E→0 | 2 | 4 | 6 | 8 | 10 D→0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 分析 因为对文法的 句子10有两棵不同的 语法树与之对应,所 以该文法是二义的
N E S D
N E
0
1
0
1
N→SE | E S→SD | D E→0 | 2 | 4 | 6 | 8 | 10 D→0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 该文法所描述的语言是所有无符号偶数 的集合(可以0开头)。 改写后的文法G‘[S]为: N→SE | E S→SD | D E→0 | 2 | 4 | 6 | 8 D→0 | 1 | 2 | 3 | 4 | 5| 6 | 7 | 8 | 9
∵S(AS)(A(AS))(A(A(b))) (A((SaA)(b)))
∴符号串(A((SaA)(b)))是文法的句型,画 出该句型的语法树如下图:
S→(AS) | (b) A→(SaA) | (a)
S
对于句型(A((SaA)(b))) 从句型的语法树求 短语: ( S a A )( b ) (A((SaA)(b))) 直接短语: (SaA) 、 (b) ((SaA)(b)) 句柄: (SaA) (SaA) (b)
(4) 若语言是无穷集合, 设计该语言的文 法一定是递归的。
例1. 给出语言 L2={an bm| m≥n≥1} 的文法
分析 根据语言句子的结构特征,设计出相 应规则
L2={ab,abb,abbb, …aabb,aabbb,aabbbb, … aaabbb, aabbbb,…}
P2: S→AB A→aAb | ab B→bB |ε
③正规式描述。
例1 文法G[A]=({A},{什么? 分析 ∵ AbAbbAbbbA…bnAbna
∴ L(G[A])={ bna | n≥0 }
例2 文法G[N]为: N →ND | D D →0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 (1) G[N]所生成的语言是什么? (2) 给出句子0127的最左、最右推导。
分析 根据语言句子的结构特征,设计出相 应规则 L3={ε,a,aa,aaa…,b,bb,bbb…,c,cc,ccc, …, ab,abb, …,bc,bcc,…} P3: A→aA | bB | cC |ε B→bB | cC |ε C→cC |ε
例4. 写一个 文法,使其语言是正偶数的集合,每 个偶数不以0开头。
N →ND | D D →0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
L(G[N])={α | α∈{0,1,2, …9}+} ={α | α为可带前导0的正整数} ={α | α为数字串} 最左推导: NNDNDDNDDDDDDD 0DDD01DD012D0127 最右推导: NNDN7ND7N27ND27 N127D1270127
1. 设计一个文法定义一个已知的语言
(1) 文法是一个四元组 G=(VN,VT, P, S), 文法四大要素中,关键是一组规则, 它定义 (或描述)了一个语言的结构。
从文法定义可知, 文法对于程序设计者来 说,文法给出了语言的精确定义和描述。
(2) 分析已知语言句子的结构特征, 设计 出相应的一组规则,但不唯一。 (3) 设计的文法必须能定义已知的语言, 不能超出或缩小所定义语言的范围。
分析 不以0开头的偶数集合中串的结构特征: L4={2,4,6,8,10,12,14,16,18,20,22,24,26,…}
P4: N→E′ | AE A→D | AD′ D→1 | 2 | 3 | …| 9 D'→0 | 1 | 2 | 3 |…| 9 E→0 | 2 | 4 | 6 | 8 E'→2 | 4 | 6 | 8
例2
已知文法 G[S] : S→(AS) | (b) A→(SaA) | (a)
试找出符号串(a)和(A((SaA)(b)))的短语﹑ 直接短语和句柄(如果有的话)。 分析 ∵ S(AS)((a)S) / (a) ∴ 符号串(a))不是文法的句型,因此 它没有短语﹑直接短语和句柄。
S→(AS) | (b) A→(SaA) | (a)
例5. 给出语言L={1n0m1m0n | n,m≥0}的 文法。 分析 根据语言句子的结构特征, 设计 出相应规则 L={ε,01,0011,…,10,1100,…,1010,100110, 110100,11001100…} P : S → 1S0 | 0A1 | ε
A → 0A1 | ε
例6. 给出语言L={ WaWt | W∈{0|1}* }, 其中 Wt表示W的逆的文法。
例2. 给出语言 L1={a2n+1|n≥0} 的文法
分析 根据语言句子的结构特征,设计出相 应规则 L1={a, aaa, aaaaa, aaaaaaa, aaaaaaaaa,…} P1:A→aAa | a
或 P1': A→aB | a
B→aa | aBa
例3. 给出语言L3={anbmck| n,m,k≥0}的文法
例3. 已知文法G[S]=( {A,B},{a,b,c,d}, P, S ) , 其中 P 为: S → AB A → aAb | ab B → cBd | cd 该文法 所生成的语言是什么? 分析 ∵ SABaAbBa2Ab2B… an-1Abn-1BanbnBanbncBd anbnc2Bd2 … anbncm-1Bdn-1anbncmdm ∴ L(G[S])={anbncmdm | n ,m≥1 }
例2 设有文法G[N]: N→SE | E S→SD | D E→0 | 2 | 4 | 6 | 8 | 10 D→0| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 1. 试证明文法G[N]有二义性。 2. 此文法所描述的语言是什么? 3. 试写出另一文法G'使L(G')=L(G)且 G'是无二义性的。
相关文档
最新文档