【编译原理】第三章部分课后题答案

第 三 章 课 后 习 题

T 3.1

考虑文法
【编译原理】第三章部分课后题答案
(a) 建立句子 【编译原理】第三章部分课后题答案【编译原理】第三章部分课后题答案 的分析树。

见下面两题。

(b) 为 (a) 的两个句子构造最左推导。

【编译原理】第三章部分课后题答案 最左推导的分析树(包括推导过程中的分析树):

【编译原理】第三章部分课后题答案 最左推导的分析树:
【编译原理】第三章部分课后题答案
(c) 为 (a) 的两个句子构造最右推导。

【编译原理】第三章部分课后题答案 最右推导的分析树(包括推导过程中的分析树):

【编译原理】第三章部分课后题答案 最右推导:

【编译原理】第三章部分课后题答案
(d) 这个文法产生的语言是什么?

该文法产生的语言是括号匹配的串,串中的各项用“,”隔开,项可以是括号匹配的子串或 a。

T 3.2

考虑文法
【编译原理】第三章部分课后题答案
(a) 为句子 【编译原理】第三章部分课后题答案 构造两个不同的最左推导,以此说明该文法是二义的。

第一种最左推导的分析树(包括推导过程中的分析树):

第二种最左推导的分析树(包括推导过程中的分析树):

一个文法,如果存在某个句子有不止一棵分析树与之对应,那么称这个文法是二义的;故,该文法是是二义的。

(b) 为 【编译原理】第三章部分课后题答案 构造对应的最右推导。

两种最右推导的分析树(包括推导过程中的分析树)如下:

(c) 为 【编译原理】第三章部分课后题答案 构造对应的分析树。

见上面四幅图。

(d) 这个文法产生的语言是什么?

通过最左推导的方式和产生式 【编译原理】第三章部分课后题答案 可以得到前缀为若干个 【编译原理】第三章部分课后题答案 的任意长度的串;

通过最左推导的方式和产生式 【编译原理】第三章部分课后题答案 可以得到前缀为若干个 【编译原理】第三章部分课后题答案 的任意长度的串;

题目给的产生式为 【编译原理】第三章部分课后题答案【编译原理】第三章部分课后题答案【编译原理】第三章部分课后题答案,由 【编译原理】第三章部分课后题答案 可以推导出空串,可以说明可以产生 【编译原理】第三章部分课后题答案【编译原理】第三章部分课后题答案,因此由任意长度的前缀 【编译原理】第三章部分课后题答案 和前缀 【编译原理】第三章部分课后题答案 的子串可以构成 【编译原理】第三章部分课后题答案【编译原理】第三章部分课后题答案 任意交错的串;

又因为每个产生式中 【编译原理】第三章部分课后题答案【编译原理】第三章部分课后题答案 的个数都相同,故产生 【编译原理】第三章部分课后题答案【编译原理】第三章部分课后题答案 数目相等且任意长度的串

T 3.3

下面的二义文法描述命题演算公式,为它写一个等价的非二义性文法。
【编译原理】第三章部分课后题答案
通过引入非终结符消除二义性:
【编译原理】第三章部分课后题答案

T 3.4

文法
【编译原理】第三章部分课后题答案
产生字母表 【编译原理】第三章部分课后题答案 上所有不含 【编译原理】第三章部分课后题答案 的正规式。注意,第一条竖线加了引号,它是正规式的或运算符号,而不是文法产生式右部各选择之间的分隔符,另外【编译原理】第三章部分课后题答案在这里是一个普通的终结符。该文法是二义的。

(a) 证明该文法产生字母表 【编译原理】第三章部分课后题答案 上的所有正规式。

证明:

(1) 该文法产生的串是字母表 【编译原理】第三章部分课后题答案 上的正规式:

【编译原理】第三章部分课后题答案【编译原理】第三章部分课后题答案产生【编译原理】第三章部分课后题答案【编译原理】第三章部分课后题答案,而【编译原理】第三章部分课后题答案【编译原理】第三章部分课后题答案【编译原理】第三章部分课后题答案上的符号,因此是正规式。若【编译原理】第三章部分课后题答案【编译原理】第三章部分课后题答案产生正规式【编译原理】第三章部分课后题答案【编译原理】第三章部分课后题答案
则:
【编译原理】第三章部分课后题答案 产生正规式 【编译原理】第三章部分课后题答案

【编译原理】第三章部分课后题答案 产生正规式 【编译原理】第三章部分课后题答案

【编译原理】第三章部分课后题答案 产生正规式 【编译原理】第三章部分课后题答案

【编译原理】第三章部分课后题答案 产生正规式 【编译原理】第三章部分课后题答案

(2) 字母表 【编译原理】第三章部分课后题答案 上的所有正规式都可由此文法产生:

字母表 【编译原理】第三章部分课后题答案 上的任一正规式(其中 【编译原理】第三章部分课后题答案【编译原理】第三章部分课后题答案 为正规式)必为以下形式之一:

【编译原理】第三章部分课后题答案,可由 【编译原理】第三章部分课后题答案 产生

【编译原理】第三章部分课后题答案,可由 【编译原理】第三章部分课后题答案 产生

【编译原理】第三章部分课后题答案,可由 【编译原理】第三章部分课后题答案 产生

【编译原理】第三章部分课后题答案,可由 【编译原理】第三章部分课后题答案 产生

【编译原理】第三章部分课后题答案,可由 【编译原理】第三章部分课后题答案 产生

【编译原理】第三章部分课后题答案,可由 【编译原理】第三章部分课后题答案 产生

因而,该文法产生字母表 【编译原理】第三章部分课后题答案 上的所有正规式

(b) 为该文法写一个等价的非二义文法。它给予算符 【编译原理】第三章部分课后题答案 、连接和 【编译原理】第三章部分课后题答案 的优先级和结合性同 2.2 节中定义的一致。

该文法没有体现运算符【编译原理】第三章部分课后题答案【编译原理】第三章部分课后题答案【编译原理】第三章部分课后题答案 和连接的优先级,因而是二义的。例如:
【编译原理】第三章部分课后题答案
通过引入非终结符消除二义性:
【编译原理】第三章部分课后题答案
消除二义性后:
【编译原理】第三章部分课后题答案
(c) 按上面两个文法构造句子 【编译原理】第三章部分课后题答案 的分析树。

存在二义性:

不存在二义性:

T 3.5

条件语句文法
【编译原理】第三章部分课后题答案

试图消除悬空 【编译原理】第三章部分课后题答案 的二义性,请证明该文法仍然是二义的。

由于【编译原理】第三章部分课后题答案不能保证【编译原理】第三章部分课后题答案【编译原理】第三章部分课后题答案的配对,因而存在二义性。

句型 【编译原理】第三章部分课后题答案 存在两个不同的最左推导。

期望的是:

if expr then
	if expr then
		matched_stmt
	else 
		if expr then
			matched_stmt
		else 
			stmt

一种和期望不一样的推导:

stmt
=> matched_stmt
=> if expr then matched_stmt else stmt
=> if expr then if expr then matched_stmt else stmt else stmt
=> if expr then if expr then matched_stmt else if expr then stmt else stmt
=> if expr then if expr then matched_stmt else if expr then matched_stmt else stmt

if expr then
	if expr then
		matched_stmt
	else 
		if expr then
			matched_stmt
else 
	stmt

另一种推导:

stmt
=> if expr then stmt
=> if expr then matched_stmt
=> if expr then if expr then matched_stmt else stmt
=> if expr then if expr then matched_stmt else matched_stmt 
=> if expr then if expr then matched_stmt else if expr then matched_stmt else stmt

if expr then
	if expr then
		matched_stmt
	else 
		if expr then
			matched_stmt
		else 
			stmt

T 3.8

(a) 消除习题 3.1 文法的左递归。
【编译原理】第三章部分课后题答案
(b) 为 (a) 的文法构造预测分析器。

【编译原理】第三章部分课后题答案

非终结符输入符号
()a,$
SS→(L)S→a
LL→SL’L→SL’
L’L’→εL→,SL’L’→ε

T 3.10

构造下面文法的 LL(1) 分析表。
【编译原理】第三章部分课后题答案
先确定非终结符的 【编译原理】第三章部分课后题答案【编译原理】第三章部分课后题答案 集:
【编译原理】第三章部分课后题答案

非终结符输入符号
intrealid,$
DD→TLD→TL
TT→intT→real
LL→idR
RR→,idRR→ε

T 3.11

构造下面文法的 LL(1) 分析表。
【编译原理】第三章部分课后题答案

【编译原理】第三章部分课后题答案

非终结符输入符号
ab$
SS→aBS
S→ε
S→bAS
S→ε
S→ε
AA→aA→bAA
BB→aBBB→b

T 3.12

下面的文法是否为 LL(1) 文法,说明理由。
【编译原理】第三章部分课后题答案
上面文法不是 LL(1) 文法。

LL(1) 文法:对于产生式 【编译原理】第三章部分课后题答案 满足:

【编译原理】第三章部分课后题答案

② 若 【编译原理】第三章部分课后题答案 ,那么 【编译原理】第三章部分课后题答案

而本题中,【编译原理】第三章部分课后题答案【编译原理】第三章部分课后题答案,不满足条件 ①,故,上面文法不是 LL(1) 文法。

T 3.18

为习题3.3的文法构造SLR分析表

扩展文法:

actiongoto
andornottruefalse()$S
0s2s3s4s51
1s6s7acc
2s2s3s4s58
3r4r4r4r4
4r5r5r5r5
5s2s3s4s59
6s2s3s4s510
7s2s3s4s511
8s6/r3s7/r3r3r3
9s6s7r12
10s6/r1s7/r1r1r1
11s6/r2s7/r2r2r2
12r6r6r6r6

T 3.29

(a) 为下面文法构造规范LR(1)分析表,画出像图3.20这样的状态转换图就可以。
【编译原理】第三章部分课后题答案
详述构建【编译原理】第三章部分课后题答案的过程:

① 拓展文法:
【编译原理】第三章部分课后题答案
② 由于【编译原理】第三章部分课后题答案后面不会存在任何字符,所以其【编译原理】第三章部分课后题答案集中只有$元素,因此产生式(0)的搜索符为$

③ 对于项目【编译原理】第三章部分课后题答案 $ 【编译原理】第三章部分课后题答案,可以将产生式(1)代入,因为项目右部【编译原理】第三章部分课后题答案后面为空串,所以新项目的搜索符为$,故得到新项目【编译原理】第三章部分课后题答案 $【编译原理】第三章部分课后题答案;类似地,将产生式(2)代入,得到新项目【编译原理】第三章部分课后题答案 $

④ 对于项目【编译原理】第三章部分课后题答案 $,可以将产生式(3)和(4)代入,因为项目右部【编译原理】第三章部分课后题答案后面为【编译原理】第三章部分课后题答案,所以新项目的搜索符为【编译原理】第三章部分课后题答案,而不是$,故得到新项目【编译原理】第三章部分课后题答案【编译原理】第三章部分课后题答案

⑤ 对于项目【编译原理】第三章部分课后题答案$,可以将产生式(5)代入,因为项目右部【编译原理】第三章部分课后题答案后面为空串,所以新项目的搜索符为$,故得到新项目【编译原理】第三章部分课后题答案 $

⑥ 项目【编译原理】第三章部分课后题答案【编译原理】第三章部分课后题答案 不会产生新的项目

⑦ 对于项目【编译原理】第三章部分课后题答案 $,可以将产生式(3)和(4)代入,注意此时产生的新项目应该继承项目【编译原理】第三章部分课后题答案 $的搜索符$,因此两个新项目为【编译原理】第三章部分课后题答案$和【编译原理】第三章部分课后题答案$

⑧ 不妨将第一个分量相同的项目对应的搜索符集合合并一下

生成其他状态的道理类似,只展示结果。

(b) 上述状态转换图有同心项目集吗?若有,合并同心项目集后是否会出现动作冲突?

其中【编译原理】第三章部分课后题答案【编译原理】第三章部分课后题答案【编译原理】第三章部分课后题答案【编译原理】第三章部分课后题答案【编译原理】第三章部分课后题答案【编译原理】第三章部分课后题答案【编译原理】第三章部分课后题答案【编译原理】第三章部分课后题答案分别为同心项目集。

同心项目集的合并(又得到LALR自动机的过程)不会引入新的移进-归约冲突,可能会引入新的归约-归约冲突;又因为规范LR(1)自动机已经解决了移进-归约冲突的问题,所以只需要验证是否存在归约-归约冲突即可。显然合并后不存在归约-归约冲突,综上,不存在动作冲突。

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
心中带点小风骚的头像心中带点小风骚普通用户
上一篇 2023年4月20日
下一篇 2023年4月20日

相关推荐