编译原理龙书第四章部分习题(编译原理作业三)
编译原理作业3
答案仅供参考,若有问题欢迎评论区讨论~
文章目录
- 编译原理作业3
- 4.2.1
- 4.2.2
- 4.2.3
- 4.2.5
- 4.4.1
- 4.4.4
- 4.6.5
- 4.6.6
- 4.7.2
- 4.7.5
4.2.1
考虑上下文无关文法:S ->SS+|SS*|a,以及串aa + a*
(1)给出这个串的一个最左推导。
(2)给出这个串的一个最右推导。
(3)给出这个串的一棵语法分析树。
(1)最左推导:
S->SS*
->SS+S*
->aS+S*
->aa+S*
->aa+a*
(2)最右推导:
S->SS*
->Sa*
->SS+a*
->Sa+a*
->aa+a*
(3)语法分析树
4.2.2
对下列的每一对文法和串重复练习4.2.1
S->0S1 | 01和串000111。
S->+SS | *SS |a和串+*aaa。
S->S(S)S | ε 和串(()())
S->(L) | a以及L->L,S | S和串((a, a), a, (a))。
- 1. S->0S1 | 01和串000111
(1)最左推导:
S->0S1
->00S11
->000111
(2)最右推导:
S->0S1
->00S11
->000111
(3)语法分析树
- S->+SS | *SS |a和串+*aaa
(1)最左推导:
S->+SS
->+*SSS
->+*aSS
->+*aaS
->+*aaa
(2)最右推导:
S->+SS
->+Sa
->+*SSa
->+*Saa
->+*aaa
(3)语法分析树
- S->S(S)S | ε 和串(()())
(1)最左推导:
S->S(S)S
->(S)S
->(S(S)S)S
->((S)S)S
->(()S)S
->(()S(S)S)S
->(()(S)S)S
->(()()S)S
->(()())S
->(()())
(2)最右推导:
S->S(S)S
->S(S)
->S(S(S)S)
->S(S(S))
->S(S())
->S(S(S)S())
->S(S(S)())
->S(S()())
->S(()())
->(()())
(3)语法分析树:
- S->(L) | a以及L->L,S | S和串((a, a), a, (a))
(1)最左推导:
S->(L)
->(L,S)
->(L,S,S)
->(S,S,S)
->((L),S,S)
->((L,S),S,S)
->((S,S),S,S)
->((a,S),S,S)
->((a,a),S,S)
->((a,a),a,S)
->((a,a),a,(L))
->((a,a),a,(s))
->((a,a),a,(a))
(2)最右推导:
S->(L)
->(L,S)
->(L,(L))
->(L,(S))
->(L,(a))
->(L,S,(a))
->(L,a,(a))
->(S,a,(a))
->((L),a,(a))
->((L,S),a,(a))
->((L,a),a,(a))
->((S,a),a,(a))
->((a,a),a,(a))
(3)语法分析树
4.2.3
为下面的语言设计文法
(1)所有由0和1组成的并且每个0之后都至少跟着一个1的串的集合。
(2)所有由0和1组成的回文的集合,也就是从前面和从后面读结果都相同的串的集合。
(1)
很容易想到正则表达式为:(0?1)*
但文法应该是:
S->ST
|ε
T->01
|1
这个串可以为空,或者是若干个T相连,每个T是01或者1,刚好符合题意。
(2)
s-> 0s0
| 1s1
| 0
| 1
| ε
4.2.5
使用练习4.2.4中描述的括号表示法来简化如下的关于语句块和条件语句的文法。
stmt-> if expr then stmt else stmt
| if expr then stmt
| begin stmtList end
stmtList-> stmt ; stmtList | stmt
stmt-> if expr then stmt [else stmt]
| begin stmtList end
stmtList-> stmt[; stmtList]
或
stmtList->stmt{;stmt}
4.4.1
为下面的每一个文法设计一个预测分析器,并给出预测分析表。你可能先要对文法进行提取左公因子或消除左递归的操作。
1. 练习4.2.2(1)中的文法。
2. 练习4.2.2(2)中的文法。
3. 练习4.2.2(3)中的文法。
4. 练习4.2.2(5)中的文法。
- S->0S1 | 01
提取左公因子:
S->0S’
S’->S1
| 1
FIRST/FOLLOW/NULLABLE集:
FIRST | FOLLOW | NULLABLE | |
---|---|---|---|
S | {0} | {1} | FALSE |
S’ | {0,1} | {1} | FALSE |
预测分析表:
0 | 1 | |
---|---|---|
S | S->0S’ | |
S’ | S’->S1 | S’->1 |
- S->+SS | *SS |a
FIRST/FOLLOW/NULLABLE集:
FIRST | FOLLOW | NULLABLE | |
---|---|---|---|
S | {+,*,a} | {+,*,a} | FALSE |
预测分析表:
+ | * | a | |
---|---|---|---|
S | S->+SS | S->*SS | S->a |
- S->S(S)S | ε
消除左递归:
S->S’
S’->(S)SS’
| ε
FIRST/FOLLOW/NULLABLE集:
FIRST | FOLLOW | NULLABLE | |
---|---|---|---|
S | {(,),$,ε} | {(,),$,ε} | TRUE |
S’ | {(,),$,ε} | {(,),$,ε} | TRUE |
预测分析表:
( | ) | $ | |
---|---|---|---|
S | S->S’ | S->S’ | S->S’ |
S’ |
S’->(S)SS’ S’->ε |
S’->ε | S’->ε |
- S->(L) | a以及L->L,S | S
消除左递归:
S->(L)
|a
L->SL’
L’->,SL’
|ε
FIRST/FOLLOW/NULLABLE集:
FIRST | FOLLOW | NULLABLE | |
---|---|---|---|
S | {(,a} | {,,),ε}(第一个是逗号) | FALSE |
L | {(,a} | {)} | FALSE |
L’ | {,,),ε} | {)} | TRUE |
预测分析表:
( | ) | , | a | |
---|---|---|---|---|
S | S->(L) | S->a | ||
L | L->SL’ | L->SL’ | ||
L’ | L’->ε | L’->,SL’ |
4.4.4
计算练习4.2.2中各个文法的FIRST和FOLLOW集合。
- S->0S1 | 01
FIRST | FOLLOW | |
---|---|---|
S | {0} | {1,$} |
- S->+SS | *SS |a
FIRST | FOLLOW | |
---|---|---|
S | {+,*,a} | {+,*,a,$} |
- S->S(S)S | ε
FIRST | FOLLOW | |
---|---|---|
S | {(,ε} | {(,),$} |
- S->(L) | a以及L->L,S | S
FIRST | FOLLOW | |
---|---|---|
S | {(,a} | {,,),$}(第一个是逗号) |
L | {(,a} | {,,)}(第一个是逗号) |
4.6.5
说明下面的文法
S->AaAb | BbBa
A->ε
B->ε
是LL(1)的,但不是SLR(1)的。
(1)该文法是LL(1)的
文法G⇔LL(1),当且仅当G中的任意两条产生式A->α|β满足下列条件
- 当α与β不能都推导出ε,则FIRST(α)与FIRST(β)不相交
- 当α或β能推导出ε
- 当α能推导出ε,则FIRST(β)与FOLLOW(A)不相交
- 当β能推导出ε,则FIRST(α)与FOLLOW(A)不相交
AaAb与BbBa不能都推导出ε,FIRST(AaAb) = {a},FIRST(BbBa) = {b},不相交,所以该文法是LL(1)的。
(2)该文法不是SLR(1)的
S_0状态:
S-> · AaAb
S-> · BbBa
A-> · ε
B-> · ε
接受一个ε,可以直接到达S_1:
A->ε·
B->ε·
此时就会发生规约冲突,所以该文法不是SLR(1)的。
4.6.6
说明下面的文法
S->SA | A
A->a
是SLR(1)的,但不是LL(1)的。
(1)该文法是SLR(1)的
构造增广文法:
0: S’->S$
1: S->SA
2: | A
3: A->a
S_0状态:
S’->·S$
S->·SA
S->·A
A->·a
S_0状态吃入S到达S_1状态:
S’->S·$
S->S·A
A->·a
S_0状态吃入A到达S_2状态:
S->A·
S_0状态吃入a到达S_3状态:
A->a·
S_1状态吃入A到达S_4状态:
S->SA·
S_1状态吃入a到达S_3状态:
A->a·
FOLLOW(S) = {a,$},FOLLOW(A) = {$}。
该文法的SLR分析表如下:
动作 | 动作 | 转移 | 转移 | |
---|---|---|---|---|
状态/符号 | a | $ | S | A |
S_0 | s3 | g1 | g2 | |
S_1 | s3 | Accept | g4 | |
S_2 | r2 | r2 | ||
S_3 | r3 | |||
S_4 | r1 | r1 |
该文法的SLR分析表没有冲突,所以该文法是SLR(1)的
(2)该文法不是LL(1)的
文法G是LL(1)的条件已经在4.6.5中给出。
对于产生式S->SA|A,SA与A不能都推导出ε,FIRST(SA) = {a},FIRST(A) = {a},相交,所以该文法不是LL(1)的。
4.7.2
为练习4.2.2(5)的文法
S->(L)
|a
L->L,S
|S
构造 1)规范LR项集族;2)LALR项集族。
构造增广文法:
S’->S$
S->(L)
|a
L->L,S
|S
(1)规范LR项集族
(2)LALR项集族
LALR即对LR(1)进行合并同心项。先看一下LR(1)中可以合并的产生式集(已经用相同的颜色标出):
2-6,3-7,4-10,8-12可合并。
合并之后得LALR项集族:
4.7.5
说明下面的文法
S->Aa | bAc | Bc | bBa
A->d
B->d
是LR(1)的,但不是LALR(1)的。
构造增广文法:
S’->S$
S->Aa
|bAc
|Bc
|bBa
A->d
B->d
(1)LR(1)项集族如图:
没有冲突,故该文法是LR(1)的。
(2)合并前:
LALR(1)项集族如图:
可以看出,在状态5下,会产生规约-规约冲突,故该文法不是LALR(1)的。
笔记:
自底向上的语法分析都不用进行消除左递归/提取左公因子的处理。
语义分析要注意构造增广文法(S’->S$)
PS:(所有题目均为自己所做,图和表均为自己所画,为了美观草稿纸就不往上贴了~)
编译原理龙书第四章部分习题(编译原理作业三)相关推荐
- 编译原理 龙书第4章 作业3
4.2.1 考虑上下文无关文法: S→S S + | S S * | a, 以及串aa+a* 1)给出这个串的一个最左推导 S→S S * →S S + S * →a S + S * →a a + S ...
- dx12 龙书第四章学习笔记 -- Direct3D的初始化
1.预备知识: ①Direct3D 12概述: 通过Direct3D这种底层图形应用程序编程接口(Application Programming Interface, API),即可在应用程序中对图形 ...
- DirectX12龙书--第五章笔记
需要龙书电子版的可联系我,部分图片太大,csdn导入不了,可访问我的github图床github或者在书里面查看. DirectX12龙书第五章笔记 第五章 5.1 3D视觉即错觉? 5.2 模型的表 ...
- 西瓜书第四章阅读笔记
西瓜书第四章阅读笔记 1.基本概念 1.1 基本算法 1.2 信息熵 1.3 信息增益 2.ID3决策树 3.C4.5决策树 4.CART决策树 5.剪枝操作 6.连续与缺失值处理 7.多变量决策树 ...
- Image Signal Processing(ISP)-第四章-LSC, CC的原理和软件实现
Hello!距这个小ISP的软件实现大概过去两年了,一直没有打起精神来将连载写完.但是我们绝不烂尾,绝不! Image Signal Processing-第四章-LSC, CC的原理和软件实现 1. ...
- 《计算机网络技术》第四章课后习题答案(全)
<计算机网络技术>第四章课后习题答案(全) 1 . IEEE802委员会提出将数据链路层划分为哪两个层次,每个层次的功能各是什么? 答: IEEE802委员会提出将数据链路层划分为两个子层 ...
- 《计算机组成原理》第二版第四章课后习题解答
<计算机组成原理>第四章课后习题解答 本文答案均为网上答案,作者仅将其补全组合在一起,错误之处欢迎指正. 1 .解释下列概念 主存. 辅存. Cache . RAM . SR ...
- 第十四章 使用SQL Shell界面(三)
文章目录 第十四章 使用SQL Shell界面(三) SQL元数据.查询计划和性能指标 显示元数据 SHOW STATEMENT EXPLAIN and Show Plan SQL Shell Per ...
- html第四章课后作业,物理化学答案——第四章化学平衡习题解答.doc
物理化学答案--第四章化学平衡习题解答.doc 第四章 化学平衡一.基本公式和内容提要1. 化学反应的方向和限度(1)反应系统的吉布斯自由能和反应进度反应进行过程中,A和B均各以纯态存在而没有相互混合 ...
- 第四章课后习题及答案
第四章课后习题答案 转载于:https://www.cnblogs.com/hhdn/archive/2007/05/13/744537.html
最新文章
- R语言ggplot2可视化:ggplot2可视化使用guide_axis(check.overlap=TRUE)选项删除重叠的轴文本、跳过部分中间轴标签
- 分享阿里云SLB-负载均衡的实现基本原理架构
- Ganglia:分布式监控系统
- The server time zone value ‘XXXXXX’ is unrecognized or represents more than one time zone
- python certificate verify failed
- Spark源码分析之BlockManagerMaster
- Web移动开发基本概念
- 电能质量分析仪上位机软件安装和使用
- 让 M1 芯片的 MacBook Pro 同时支持两个 4k 显示器
- 电瓶车不交罚款会有什么处罚
- Windows编程 Windows程序的生与死(下)
- 身份证二进制数据解析
- buff系统 游戏中_请问BUFF状态
- NTP网络时钟同步协议对计算机网络数据的重要性
- Clinical Chemistry | 张建中/徐健开发幽门螺杆菌单细胞精准诊疗技术
- 列车售票系统源代码c语言,火车站售票查询系统 C语言 源代码
- doraemon的python 集合
- 各大网站软件提交入口 |软件发布
- Linux与Python经验总结
- 第一篇(上):对称分量分解(Symmetrical Component Decomposition)序列变换 (Sequence Transformation)零序 正序 负序 分解
热门文章
- 注册表修改系统显示时间
- android webview 无法加载插件,webView 测试问题,无法检测到 webView 控件
- 仿美团酒店预订的html模板,jQuery手机端仿美团酒店预订日期选择插件
- 高手常用的15 种 SQL 优化
- 机械加工行业QC数据采集与CPK分析案例分享
- 记一次PSP游戏文件(iso)提取BGM(cpk文件处理,无后缀音频文件格式转换,pmf文件转换)
- 2021数模美赛A题翻译及思路
- idc机房安装服务器系统,IDC机房如何部署IP KVM
- 尚硅谷大数据之Linux
- 【matlab深度学习工具箱】classificationLayer参数详解