下面答案仅供参考!

1.考虑下面文法G1:

S→a∣∧∣(T)

T→T,S∣S

(1) 消去 Q 的左递归。然后,对每个非终结符,写岀不带回溯的递归子程序。

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

2.对下面的文法G:

P→(E)lalblΛ

(1)计算这个文法的每个非终结符的FIRST和FOLIOW.

(2)证明这个文法是LL(1)的。

(3)构造它的预测分析表。

(4)构造它的递归下降分析程序。

3.下面文法中,哪些是LL(1)的,说明理由。

(1)S→Abc

         A→a∣ε

         B→b∣ε

(2)S→Ab

         A→a∣B∣ε

         B→b∣ε

(3)S→ABBA

         A→a∣ε

         B→b∣ε

 (4)S→aSe∣B

       B→bBe∣C

       C→cCe∣d

4. 对下面文法:

              Expr→-Expr

              Expr→(Expr)∣Var

              ExprTail→-Expr∣ε

              Var→id VarTail

              VarTail→(Expr)∣ε

(1) 构造 LL(1)分析表。

(2) 给出对句子 id - -id((id))的分析过程。

构造文法的预测分析表,通常应当按下列步骤进行: (1) 消除文法的左递归(包括所有直接左递归和间接左递归); (2) 对消除左递归后的文法,提取左公因子; (3) 对经过上述改造后的文法,计算它的每个非终结符的 FIRST 集合和 FOLLOW 集合 ⑷ 根据 FIRST 集合和 FOLLOW 集合构造预测分析表:

第1步对文法G的每个产生式A→α执行第1步和第3步;

第2步对每个终结符a∈FIRST(α),把A→α加至M[A,a]中;

第3步若ε∈FIRST(α),则对任何b∈FOLLOW(A)把A→α加至M[A,b]中;

第4步把所有无定义的M[A,a]标上“出错标志”。

解答:

(1)计算每个非终结符的FIRST集合和FOLLOW集合如下:

FIRST(Expr)={-,(,id}

FIRST(ExprTail)={-,ε}

FIRST(Var)={id}

FIRST(VarTail)={(,ε}

FOLLOW(Expr)={),#}

FOLLOW(ExprTail)={),#}

FOLLOW(Var)={-,),#}

FOLLOW(VarTail)={-,∣,#}

构造其预测分析表如下:

- id ( ) #
Expr Expr→- Expr Expr→Var ExprTail Expr→-( Expr)
ExprTail ExprTail→-Expr ExprTail→ε ExprTail→ε
Var Var→id VarTail
VarTail VarTail→ε VarTail→(Expr) VarTail→ε VarTail→ε

(2)句子id--id((id))的分析过程如下:

步骤

符号栈

输入串

所用产生式

0

# Expr

id--id((id)) #

1

# ExprTail Var

id--id((id)) #

Expr→Var ExprTail

2

# ExprTail VarTail id

id--id((id)) #

Var→id VarTail

3

# ExprTail VarTail

--id((id)) #

4

# ExprTail

--id((id)) #

VarTail→ε

5

# Expr -

--id((id)) #

ExprTail→-Expr

6

# Expr

-id((id)) #

7

# Expr -

-id((id)) #

Expr→-Expr

8

# Expr

id((id)) #

9

# ExprTail Var

id((id)) #

Expr→Var ExprTail

10

# ExprTail VarTail id

id((id)) #

Var→id VarTail

11

# ExprTail VarTail

((id)) #

12

# ExprTail ) Expr (

((id)) #

VarTail→(Expr)

13

# ExprTail ) Expr

(id)) #

14

# ExprTail ) ) Expr (

(id)) #

15

# ExprTail ) ) Expr

id)) #

16

# ExprTail ) ) ExprTal Var

id)) #

Expr→Var ExprTail

17

# ExprTail ) ) ExprTail VarTail id

id)) #

Var→id VarTail

18

# ExprTail ) ) ExprTail VarTail

)) #

19

# ExprTail ) ) ExprTail

)) #

VarTail→ε

20

# ExprTail ) )

)) #

ExprTail→ε

21

# ExprTail )

) #

22

# ExprTail

#

23

#

#

ExprTail→ε

suc

5. 把下面文法改写为 LL(1)的:

       Declist→Declist;Decl∣Decl

       Decl→IdList:Type

       IdList→IdList,id∣id

       Type→ScalarType∣array(ScalarTypeList) of Type

       ScalarType→id∣Bound..Bound

       Bound→Sign IntLiteral∣id

       Sign→+∣-∣ε

       ScalarTypeList→ScalarTypeList,ScalarType∣ScalarType

答:本题目主要考査学生理解和运用消除文法的左递归、提取左公共因子等算法的能力, 为判断文法是否是 LL(1)文法,还要计算文法的 FIRST 集合和 FOLLOW 集合。

消除文法的左递归的基本思想是,将文法规则中的左递归结构变换成等价的右递归结构。

提取左公因子的算法,是对包含公共左因子的产生式候选,反复提取左因子,就能够 把每个非终结符(包括新引进者)的所有候选首符集变成为两两不相交。

消除文法的左递归、提取左公共因子后,再计算文法的各非终结符00的首符集 FIRST( X)和随符集 FOLLOW( X),然后根据 LL(1)文法的充分必要条件(即 LL(1)文法 的定义)来判断文法是否是 LL(1)文法。

首先消除左递归,得到文法G(Declist):

Declist→Decl Declist’

Declist’→;Decl Declist’∣ε

Decl→IdList:Type

IdList→id IdList’

IdList’→,id List’∣ε

Type→ScalarType∣array(ScalarTypeList) of Type

ScalarType→id∣Bound..Bound

Bound→Sign IntLiteral∣id

Sign→+∣-∣ε

ScalarTypeList→ScalarType ScalarTypeList’

ScalarTypeList’→,ScalarType ScalarTypeList’∣ε

显然,改造后的文法没有左公共因子,计算每个非终结符的FIRST集合和FOLLOW集合如下:

FIRST(Declist)={id}

FIRST(Declist’)={;,ε}

FIRST(Decl)={id}

FIRST(IdList)={id}

FIRST(IdList’)={;,ε}

FIRST(Type)={id,+,-,IntLiteral,array}

FIRST(ScalarType)={id,+,-,IntLiteral}

FIRST(Bound)={id,+,-,InLiteral}

FIRST(Sign)={+,-,ε}

FIRST(ScalarTypeList)={id,+,-,IntLiteral }

FIRST(ScalarTypeList’)={,,ε}

FOLLOW(Declist)={#}

FOLLOW(Declist’)={#}

FOLLOW(Decl)={id,;}

FOLLOW(IdList)={:}

FOLLOW(IdList’)={:}

FOLLOW(Type)={id,;}

FOLLOW(ScalarType)={id,;,),,}

FOLLOW(Bound)={id,;,)’,’..}

FOLLOW(Sign)={IntLiteral}

FOLLOW(ScalarTypeList)={)}

FOLLOW(ScalarTypeList’)={)}

显然,改造后的文法是 LL(1)的。

编译原理陈火旺版第四章课后题答案相关推荐

  1. 编译原理陈火旺版第三章课后题答案

    下面答案仅供参考! 1.编写一个对于 Pascal 源程序的预处理程序.该程序的作用是,每次被调用时都将 下一个完整的语句送进扫描缓冲区,去掉注解行,同时要对源程序列表打印. 答:以下是一个简单的预处 ...

  2. 编译原理陈火旺版第五章课后题答案

    下面答案仅供参考! 1.令文法G为: E→E+T∣T T→T*F∣F F→(E)∣i 证明E+T*F是它的一个句型,指出这个句型的所有短语,直接短语和句柄. 2.考虑下面的表格结构文法G2: S→a∣ ...

  3. 编译原理陈火旺第三版第七章课后题答案

    下面的答案仅供参考! 1. 给出下面表达式的逆波兰表示(后缀式): a*(-b+c)                               not A or not (C or not D) a ...

  4. 编译原理陈火旺第三版第六章课后题答案

    下面的答案仅供参考! 1.按照表6.1所示的属性文法,构造表达式(4*7+1) *2的附注语法树. 答: 首先考虑最底最左边的内部结点,它对应于产生式F→digit,相应的语义规则为F. val: = ...

  5. 数据库原理第四章课后题答案(第四版)

    一.选择题 1. B    2. B    3. D    4. B    5. C 6. D    7. B    8. D    9. D    10. D 11. A   12.C   13.D ...

  6. 线性代数第五版吉尔伯特课后答_线性代数同济第五版第四章课后习题答案!

    搜集 | 整理 |  测试 | @小愉 免责声明:以下资源或软件均来自互联网,仅供学习和交流使用,如有侵权请联系删除,请勿用于商业和非法途径等,如有法律纠纷与本人无关! 本文未经允许,不得转载! 适用 ...

  7. 李航老师《统计学习方法》第二版第三章课后题答案

    其他章节答案请参考我的汇总统计学习方法答案汇总,都是自己写的. 1.参照图3.1,在二维空间中给出实例点,画出 kkk 为1和2时的 kkk 近邻法构成的空间划分,并对其进行比较,体会 kkk 值的选 ...

  8. 泛函分析——步尚全老师第四章课后题答案往年题

    百度网盘链接: https://pan.baidu.com/s/1ECupHu5-Dz-XOgpaThQckA

  9. mysql教材第四章课后题答案_mySQL 教程 第4章 数据查询

    mySQL运算符 这些运算符在SQL查询中用得到. 算数运算符 + 加 - 减 * 乘 / DIV 除 % MOD 取余数 比较运算符 = 等于 <> != 不等于 < <= ...

最新文章

  1. 【PAT (Basic Level) 】1015 德才论 (25 分)
  2. mpvue 小程序如何开启下拉刷新,上拉加载?
  3. 安装brew提示/usr/local/bin is not in your PATH.
  4. asp.net发送邮件时在正文中插入图片
  5. 信息学奥赛一本通 1265:【例9.9】最长公共子序列
  6. 关于QT多线程子线程使用信号和
  7. Django:ORM基本操作-CRUD,管理器对象objects,----->聚合查询、原生数据库操作
  8. zabbix3.2通过snmp v2采集Dell服务器iDRAC口信息监控硬件
  9. [原] 让网页中的对话框不显示以前输入的信息
  10. FHJ学长的心愿 QDUOJ 数论
  11. 因为计算机丢失d3dx10,Win7打开剑灵游戏提示丢失d3dx10_43.dll怎么解决
  12. css实现--三角形/箭头(上下左右)--详细原理
  13. virtualbox下安装雪豹10.6系统(AMD下亲测成功)
  14. do还是doing imagine加to_do还是doing imagine加to_do、to do、doing用法全汇总,再也不用担心选错啦(收藏)......
  15. java socket 卡住_Java socket通讯实现过程及问题解决
  16. GitHub 近两万 Star,无需编码,可一键生成前后端代码,这个开源项目有点强!...
  17. 【瑞萨RA4系列】开发环境搭建和点灯指南
  18. 【工具】之DataX-Web简单介绍
  19. [论文翻译]Deep Learning 翻译及阅读笔记
  20. lumia flash android,Lumia830吃上棉花糖!WP手机刷安卓7.1详细教程

热门文章

  1. 游戏编程中的寻路算法研究
  2. Linux如何部署私有IPFS(安装、部署、共享key,添加节点,测试)
  3. JDK 安装 配置 运行 帮助文档
  4. 199,一个被正则表达式遗忘的号码段?
  5. TOUGH系列软件建模实践方法及在地下水、CO2地质封存、水文地球化学、地热等多相多组分系统多过程耦合高级教程
  6. 柳传志经典语录:管理三要素,即建班子、定战略和带队伍
  7. js将秒转换成几天几小时几分几秒,每秒刷新
  8. ReadPV用法以及启动策略
  9. 用html+css+jQuery制作一个简单的流程图/步骤图
  10. floquet端口x极化入射波_AnsoftHFSS在周期性异向介质研究中的仿真方法.pdf