编译原理作业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:(所有题目均为自己所做,图和表均为自己所画,为了美观草稿纸就不往上贴了~)

编译原理龙书第四章部分习题(编译原理作业三)相关推荐

  1. 编译原理 龙书第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 ...

  2. dx12 龙书第四章学习笔记 -- Direct3D的初始化

    1.预备知识: ①Direct3D 12概述: 通过Direct3D这种底层图形应用程序编程接口(Application Programming Interface, API),即可在应用程序中对图形 ...

  3. DirectX12龙书--第五章笔记

    需要龙书电子版的可联系我,部分图片太大,csdn导入不了,可访问我的github图床github或者在书里面查看. DirectX12龙书第五章笔记 第五章 5.1 3D视觉即错觉? 5.2 模型的表 ...

  4. 西瓜书第四章阅读笔记

    西瓜书第四章阅读笔记 1.基本概念 1.1 基本算法 1.2 信息熵 1.3 信息增益 2.ID3决策树 3.C4.5决策树 4.CART决策树 5.剪枝操作 6.连续与缺失值处理 7.多变量决策树 ...

  5. Image Signal Processing(ISP)-第四章-LSC, CC的原理和软件实现

    Hello!距这个小ISP的软件实现大概过去两年了,一直没有打起精神来将连载写完.但是我们绝不烂尾,绝不! Image Signal Processing-第四章-LSC, CC的原理和软件实现 1. ...

  6. 《计算机网络技术》第四章课后习题答案(全)

    <计算机网络技术>第四章课后习题答案(全) 1 . IEEE802委员会提出将数据链路层划分为哪两个层次,每个层次的功能各是什么? 答: IEEE802委员会提出将数据链路层划分为两个子层 ...

  7. 《计算机组成原理》第二版第四章课后习题解答

    <计算机组成原理>第四章课后习题解答 本文答案均为网上答案,作者仅将其补全组合在一起,错误之处欢迎指正. 1 .解释下列概念   主存.   辅存.  Cache .  RAM .  SR ...

  8. 第十四章 使用SQL Shell界面(三)

    文章目录 第十四章 使用SQL Shell界面(三) SQL元数据.查询计划和性能指标 显示元数据 SHOW STATEMENT EXPLAIN and Show Plan SQL Shell Per ...

  9. html第四章课后作业,物理化学答案——第四章化学平衡习题解答.doc

    物理化学答案--第四章化学平衡习题解答.doc 第四章 化学平衡一.基本公式和内容提要1. 化学反应的方向和限度(1)反应系统的吉布斯自由能和反应进度反应进行过程中,A和B均各以纯态存在而没有相互混合 ...

  10. 第四章课后习题及答案

    第四章课后习题答案 转载于:https://www.cnblogs.com/hhdn/archive/2007/05/13/744537.html

最新文章

  1. R语言ggplot2可视化:ggplot2可视化使用guide_axis(check.overlap=TRUE)选项删除重叠的轴文本、跳过部分中间轴标签
  2. 分享阿里云SLB-负载均衡的实现基本原理架构
  3. Ganglia:分布式监控系统
  4. The server time zone value ‘XXXXXX’ is unrecognized or represents more than one time zone
  5. python certificate verify failed
  6. Spark源码分析之BlockManagerMaster
  7. Web移动开发基本概念
  8. 电能质量分析仪上位机软件安装和使用
  9. 让 M1 芯片的 MacBook Pro 同时支持两个 4k 显示器
  10. 电瓶车不交罚款会有什么处罚
  11. Windows编程 Windows程序的生与死(下)
  12. 身份证二进制数据解析
  13. buff系统 游戏中_请问BUFF状态
  14. NTP网络时钟同步协议对计算机网络数据的重要性
  15. Clinical Chemistry | 张建中/徐健开发幽门螺杆菌单细胞精准诊疗技术
  16. 列车售票系统源代码c语言,火车站售票查询系统 C语言 源代码
  17. doraemon的python 集合
  18. 各大网站软件提交入口 |软件发布
  19. Linux与Python经验总结
  20. 第一篇(上):对称分量分解(Symmetrical Component Decomposition)序列变换 (Sequence Transformation)零序 正序 负序 分解

热门文章

  1. 注册表修改系统显示时间
  2. android webview 无法加载插件,webView 测试问题,无法检测到 webView 控件
  3. 仿美团酒店预订的html模板,jQuery手机端仿美团酒店预订日期选择插件
  4. 高手常用的15 种 SQL 优化
  5. 机械加工行业QC数据采集与CPK分析案例分享
  6. 记一次PSP游戏文件(iso)提取BGM(cpk文件处理,无后缀音频文件格式转换,pmf文件转换)
  7. 2021数模美赛A题翻译及思路
  8. idc机房安装服务器系统,IDC机房如何部署IP KVM
  9. 尚硅谷大数据之Linux
  10. 【matlab深度学习工具箱】classificationLayer参数详解