题目:编写识别由下列文法所定义的表达式的预测分析程序。

EàE+T | E-T | T

TàT*F | T/F |F

Fà(E) | i

输入:每行含一个表达式的文本文件。

输出:分析成功或不成功信息。

?? (题目来源:编译原理实验(三)--预测(LL(1))分析法的实现)

?

解答:

?

(1)分析

a) ∵E=>E+T=>E+T*F=>E+T*(E)即有E=>E+T*(E)存在左递归。用直接改写法消除左递归,得到如下:

E à TE’ E’ à +TE’ | ?TE’|ε

T à FT’ T’ à *FT’ | /FT’|ε

F à (E) | i

对于以上改进的方法。可得:

对于E’:?FIRST( E’ )=FIRST(+TE’)∪FIRST(-TE’)∪{ε}={+,?,ε}

对于T’:FIRST( T’ )=FIRST(*FT’)∪FIRST(/FT’)∪{ε}={*,∕,ε}

而且:FIRST( E ) = FIRST( T ) = FIRST( F )=FIRST((E))∪FIRST(i)={(,i }

由此我们容易得出各非终结符的FOLLOW集合如下:

FOLLOW( E )= { ),#}

FOLLOW(E’)= FOLLOW(E)={ ),#}

FOLLOW( T )= FIRST(E’)\ε∪FOLLOW(E’)={+,?,),#}

FOLLOW( T’ ) = FOLLOW( T ) ={+,?,),#}

FOLLOW( F )=FIRST(T’)\ε∪FOLLOW(T’)={*,∕,+,?,),#}

由以上FOLLOW集可以我们可以得出SELECT集如下:

对ESELECT(EàTE’)=FIRST(TE’)=FIRST(T)={ (,i }

对E’ SELECT(E’ à+TE’)={ + }

SELECT(E’ à ?TE’)={ ? }

SELECT(E’ àε)={ε,),#}

对TSELECT(TàFT’)={(,i}

对T’ SELECT(T’ à*FT’)={ * }

SELECT(T’ à ∕FT’)={ ∕ }

SELECT(T’ àε)={ε,+,?,),#}

对FSELECT(Fà(E) )={ ( }

SELECT(Fài)={ i }

∴ SELECT(E’ à+TE’)∩SELECT(E’ à ?TE’)∩SELECT(E’ àε)=F

SELECT(T’ à*FT’)∩SELECT(T’ à ∕FT’)∩SELECT(T’ àε)=F

SELECT(Fà(E) )∩SELECT(Fài)= F

由上可知,有相同左部产生式的SELECT集合的交集为空,所以文法是LL(1)文法。

?

b) 由Select集构造文法LL(1)的预测分析表 (表1)

非终

结符

终结符

i

+

-

*

/

(

)

#

ε

E

E >TE’[0]

E->TE’[5]

E’

E’-> + T E’[11]

E’-> - TE’[12]

E’->ε[16]

E’->ε[17]

E’->ε[18]

T

T->FT’[20]

T->FT’[25]

T’

T’->ε[31]

T’->ε[32]

T’->*FT’[33]

T’->/FT’[34]

T’->ε[36]

T’->ε[37]

T’->ε[38]

F

F->i[40]

F->(E)[45]

表1. LL(1)预测分析表

?

(2)设计

算法的主要流程图(如:图1)。

图1.流程图

?

(3)程序代码如下

/************************************************************************

*文件名:test3.c

*文件描述:预测分析法实现的语法分析器。分析如下文法:

* E->E+T | E-T | T

* T->T*F | T/F |F

* F->(E) | i

* 输入:每行含一个表达式的文本文件(#号结束)。

* 输出:分析成功或不成功信息。

*创建人:余洪周 2006-12-16

*版本号:1.0?

*说明 :为了表示的方便采用了如下的所示表示方法:

*? A=E' B=T'

?* 非终结符:0=E1=E' 2=T 3=T'

编译原理预测分析法c语言,编译原理预测分析法C语言的实验报告.doc相关推荐

  1. C语言外推法求搜索区间程序,一维搜索外推法程序设计实验报告.doc

    课程设计(实验)材料(1) 安徽工程大学 机械优化设计 课程设计(实验)报告 专 业 班 级: 车辆工程 110 设 计 题 目: 一维搜索外推法程序设计 学 生 姓 名: 王阔 学 生 学 号: 3 ...

  2. c语言对称字母菱形AABAABCBA,[工学]c语言实验报告.doc

    [工学]c语言实验报告.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3.该文档 ...

  3. 周信东c语言实验二实验报告,周信东主编最新版C语言程序设计基础实验一实验报告.doc...

    周信东主编最新版C语言程序设计基础实验一实验报告.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我 ...

  4. 古典密码算法实验c语言,古典密码实验报告.doc

    古典密码实验报告.doc 哈尔滨工程大学实验报告实验名称古典密码算法班级学号姓名实验时间2014年4月成绩指导教师实验室名称哈尔滨工程大学实验室与资产管理处制一.实验名称古典密码算法2.实验目的通过编 ...

  5. c语言图形时钟编程,C语言图形时钟课程设计实验报告.doc

    C语言图形时钟课程设计实验报告.doc 目录 1.系统功能要求 . 2. 数据结构设计及 说明 . 3.程序结构(画流程图) . 4.各模块的功能 . 5.试验结果(包括输入数据和输出结果) . 6. ...

  6. c语言应用报告,C语言:数组的应用实验报告.doc

    C语言:数组的应用实验报告.doc -1- 课程名称课程名称结构化程序设计与结构化程序设计与 C C 语言语言 开课实验室开课实验室 年年 月月 日日 年级年级.专业.班.专业.班 学号学号 姓名姓名 ...

  7. c语言课设航班信息管理软件管理系统,c语言航班信息查询系统实验报告.doc

    c语言航班信息查询系统实验报告.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3 ...

  8. c语言第五章课后答案冯山,C语言 四川师范大学 信息与计算科学 冯山实验五.doc...

    C语言 四川师范大学 信息与计算科学 冯山实验五.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我 ...

  9. 大学c语言实验报告,上海工程技术大学C语言实验报告.doc

    上海工程技术大学C语言实验报告.doc 实 验 报 告高级语言程序设计20122013学年第 一 学期学院(部)管理学院指导教师李旭芳班级代号姓名/学号同组人无实验一一实验项目名称程序流程控制分别求1 ...

  10. 五猴分桃c语言课程设计,c语言程序设计五猴分桃问题实验报告.doc

    c语言程序设计五猴分桃问题实验报告.doc 课程设计报告学院.系:吉林大学珠海学院计算机科学与技术系专业名称:软件工程课程设计科目C语言程序课程设计所在班级:10班学生学号:04121010学生姓名: ...

最新文章

  1. ThinkPHP关联模型详解
  2. 安装 VMware Tools 实现窗口 自适应 及 主机与虚拟机之间复制粘贴
  3. CRM_REPORT_RF_AUTH_OBJ_ORD_PR
  4. 基于注释的Spring MVC Web应用程序入门
  5. 电子书下载(强烈推荐):《大道至简——软件工程实践者的思想》
  6. mvc5 源码解析2-2 mvchandler的执行
  7. python 图像检索_深度学习图像检索
  8. 在reader中勾选pdf复选框_Excel中设计具有可任意勾选复选框的操作方法
  9. 刷榜中ASO优化中下载量与评论之间的对应比
  10. Windows调出屏幕键盘的步骤
  11. 麦子学院demo(html+css)
  12. (附源码)计算机毕业设计SSM快递代收系统
  13. 另一个伊甸 更新进度 23-01-27
  14. Java java.sql.SQLException: Field ‘xxx‘ doesn‘t have a default value
  15. 思科模拟器——RIP协议
  16. 波士顿矩阵和新波士顿矩阵
  17. 【调剂】佳木斯大学信院201实验室今年继续招生,机器学习+医学影像方向
  18. 人生的12句Comperehend领悟-感悟颇深
  19. Android自定义View精品(CustomCalendar-定制日历控件)
  20. python大作业——扫雷游戏

热门文章

  1. centos7 apache2.4 测试
  2. JVM参数详解和调优
  3. C#代码创建3D模型
  4. LAMP(linux下apache+mysql+php)平台编译安装的实现
  5. 计算机组成原理课后习题答案一
  6. hdu 1147(线段相交)
  7. hdu-1565(方格取数(1))---状态压缩
  8. Python中的遇到的错误(持续更新)
  9. 。。。。。。想不通的ADO.NET。
  10. bzoj 1632: [Usaco2007 Feb]Lilypad Pond【bfs】