1、 编 译 原 理 实 验 报 告实验名称: 实验二编写递归下降语法分析器实验类型: 验证型实验指导教师: 何 中 胜专业班级: 13 软件四姓 名: 丁越学 号: 13030504电子邮箱: 实验地点: 秋白楼 B720实验成绩:日期:2016 年 4 月 1 日一、实验目的通过设计、编制、调试一个递归下降语法分析程序,实现对词法分析程序所提供的单词序列进行语法检查和结构分析,掌握常用的语法分析方法。通过本实验,应达到以下目标:1、掌握从源程序文件中读取有效字符的方法和产生源程序的内部表示文件的方法。2、掌握词法分析的实现方法。3、上机调试编出的语法分析程序。二、实验过程1、分析对象 分析算术。

2、表达式的 BNF 定义如下:算术表达式项|算术表达式项|算术表达式项项因式|项*因式|项因式因式变量(算术表达式 )变量i用符号表示如下: ET|ET|E-T TF|T*F|TF Fi(E)递归下降分析程序实现思想简单易懂。程序结构和语法产生式有直接的对应关系。因 为每个过程表示一个非终结符号的处理,添加语义加工工作比较方便。递归下降分析程序的实现思想是:识别程序由一组子程序组成。每个子程序对应于一 个非终结符号。每一个子程序的功能是:选择正确的右部,扫描完相应的字。在右部中有非终结符号 时,调用该非终结符号对应的子程序来完成。自上向下分析过程中,如果带回溯,则分析过程是穷举所有可能的推导,看。

3、是否能推 导出待检查的符号串。分析速度慢。而无回溯的自上向下分析技术,当选择某非终结符的 产生时,可根据输入串的当前符号以及各产生式右部首符号而进行,效率高,且不易出错。无回溯的自上向下分析技术可用的先决条件是:无左递归和无回溯。 无左递归:既没有直接左递归,也没有间接左递归。无回溯:对于任一非终结符号 U 的产生式右部 x1|x2|xn,其对应的字的首终结符号 两两不相交。2. 递归下降语法分析流程图实验分为五个模块,分别是:E( )函数,E1( )函数,T( )函数,T1( )函数,F( )函数。用递归下降算法分析上述算术表达式的框图,如下图所示。ZC 过程为总控程序。图 1-1 ZC 过。

4、程图 1-2 E 过程图 1-3 T 过程图 1-4 F 过程图 1-5 函数过程 SYM图 1-6 函数过程 Advance3、实验结果1.测试数据测试数据时输入要测试的串并以#结束数据共分为 2 组,分别如下:第一组数据i+i*i#第二组数据I*#2.测试结果测试结果如下图所示:第一组数据图 1-7 测试结果 1第二组数据图 1-8 测试结果 24、讨论与分析本次试验分为 5 个大步骤:ZC 过程:开始,然后打印“INPUT EXPRESSION”,输入字符串 ST,执行 E 过程,然后判断 SYM 是否不等于#或者 TZ 是否等于 1,如果是,打印“ERROR AGAIN”,给 TZ 赋。

5、值为0,跳回到开始步骤继续;如果不是则打印“RIGHT AGAIN”,回到开始步骤继续。E 过程:开始,执行 T 过程,判断 SYM 是否等于“+”或“” ,如果不是,返回,如果是,执行 ADVANCE,跳回到开始步骤。T 过程:开始,执行 F 过程,判断 SYM 是否等于“*”或者“/” ,如果不是,返回,如果是,执行 ADVANCE,在跳回到开始过程。F 过程:开始,判断 SYM 是否不等于“A”或者 SYM 是否小于 Z,如果不是,执行ADVACE,然后执行返回,如果不是,再判断 SYM 是否不等于“(” ,如果是,打印“ERROR” ,TZ 赋值 1,返回;如果不是,执行 ADVANC。

6、E,在执行 E 过程,接着继续判断 SYM 是否不等于“) ”,如果是,打印ERROR,TZ 赋值 1,如果不是,执行 ADVANCE,返回。SYM:取字符串 ST 的第一个字符给 SYM。ADVANCE:取字符串 ST 去除首字符后留下的字符串。5、附录:关键代码部分如下:(E()函数和 E1()函数构成 E 过程,T()函数和 T1()函数构成 T 过程,F()函数构成 F过程)/*E()函数*/void E()if(x=0)output1(i);printf(E-TE1);output(i+1);T();E1();/*E1()函数*/void E1()if(x=0)if(si=+)out。

7、put1(i);printf(E1-+TE1);output(i+1);advance();T();E1();else if(si=-)output1(i);printf(E1-TE1);output(i+1);advance();T();E1();else if(si=#)output1(i-1);printf(E1-);output(i);elseoutput1(i);printf(E1-);output(i+1);/*T()函数*/void T()if(x=0)if(si!=#)output1(i);printf(T-FT1);output(i+1);F();T1();elseoutpu。

8、t1(i-1);printf(T-FT1);output(i);F();T1();/*T1()函数*/void T1()if(x=0)if(si=*)output1(i);printf(T1-*FT1);output(i+1);advance();F();T1();else if(si=/)output1(i);printf(T1-/FT1);output(i+1);advance();T1();F();else if(si=#)output1(i-1);printf(T1-);output(i);elseoutput1(i);printf(T1-);output(i+1);/*F()函数*/。

9、void F()if(x=0)if(si=i)output1(i);printf(F-i);output(i+1);advance();else if(si=()output1(i);printf(F-(E);output(i+1);advance();E();if(x!=1)if(si=)output1(i);printf(F-(E);output(i+1);advance();elsex=1;else if(si=#)x=1;else if(si=)x=1;六、实验者自评通过本次实验,我对递归下降词法分析器的结构,过程有了更进一步的了解,通过学习书本和试验原理书上的内容,对它的工作原理,具体实行步骤有了进一步的掌握。这次实验让我了解到如何设计、编制并调试递归下降语法分析程序,加深对递归下降语法分析原理的理解;熟悉了构造递归下降语法分析程序的手工方式的相关原理,根据识别语言单词的状态转换图,使用某种高级语言(例如 C 语言)直接编写此法分析程序。由于本次试验是测试性试验,所以要求输出的结果是成功与否,输入一个句型,进过分析,判断它是否合法,主要内容在于其判断过程中。本次试验不光提高了自己的编程能力,同时提高了对递归下降的了解。。

《编译原理实验报告:实验二编写递归下降语法分析程序》由会员第***分享,可在线阅读,更多相关《编译原理实验报告:实验二编写递归下降语法分析程序》请在金锄头文库上搜索。

递归下降文法C语言实验报告,编译原理实验报告:实验二编写递归下降语法分析程序...相关推荐

  1. 【实验】编译原理——编译器认知实验

    系列文章目录 学习笔记 [学习笔记]编译原理--第一章 编译引论 [学习笔记]编译原理--第二章 词法分析 实验 [实验]编译原理--编译器认知实验 文章目录 系列文章目录 学习笔记 实验 一.实验目 ...

  2. 递归下降文法C语言实验报告,递归下降语法分析器实验报告.doc

    递归下降语法分析器实验报告 编译原理实验报告 题目: 递归下降语法分析器 学 院 计算机科学与技术 专 业 xxxxxxxxxxxxxxxx 学 号 xxxxxxxxxxxx 姓 名 宁剑 指导教师 ...

  3. 语言的定义——编译原理

    语言的定义--编译原理 给定文法G=(VT,VN,P,S),如果α→β∈P,那么可以将符号串中的γαδ中的α替换为β,记作 γαδ⇒γβδ,此时称γαδ直接推导出γβδ. 推导(derivation) ...

  4. 实验6 8255并行接口实验【微机原理】【实验】

    实验6 8255并行接口实验[微机原理][实验] 前言 推荐 3.2 8255并行接口实验 3.2.1实验目的 3.2.2实验内容 3.2.3实验原理 3.2.4 实验说明及步骤 3.2.5实验提示 ...

  5. 算符优先文法编写java语法分析器,编译原理课程设计实验报告——基于算符优先分析方法的表达式语法分析器...

    内容简介: 一.设计目的 了解用算符优先法对表达进行语法分析的方法,掌握自顶向下的预测语法分析程序的手工构造方法. 二.设计内容 对简单表达式文法构造算符优先分析器. 三.设计要求 1.对下列简单表达 ...

  6. 编译原理上机实习c语言小子集编译程序的实现报告,编译原理上机实习指导书(2015-11修改).pdf...

    <编译原理上机实习>指导书 一.上机实习目的 理解编译程序的构造原理,掌握编译程序的构造方法与技术.通过实习,使学生既加深对 编译原理基础理论的理解,又提高动手能力,特别是提高软件设计能力 ...

  7. 太原理工 编译原理 c语言,太原理工大学编译原理实验

    <太原理工大学编译原理实验>由会员分享,可在线阅读,更多相关<太原理工大学编译原理实验(19页珍藏版)>请在人人文库网上搜索. 1.本科实验报告课程名称: 编译原理 实验项目: ...

  8. 编译原理:词法分析实验报告

    词法分析实验报告 文章目录 词法分析实验报告 一.实验目的 二.实验原理 三.实验要求 四.实验步骤(利用Java语言来进行词法分析) ① 待分析的语言词法 ② 单词符号对应的种别码 ③ 词法分析程序 ...

  9. PL/0语言编译器扩展 编译原理课程实践(1)

    转眼大学生活就要结束,编译原理课程学的东西很多都忘记了.当时我们编译原理课程实践是PL/0语言编译器扩展,在原有PL/0语言文法进行扩展.我写这次博文一是为了回忆以前学的知识,加深记忆:二是和大家分享 ...

  10. 【C++实现】编译原理 免考小队 消除一切左递归

    背景 期末考试免考,冲! 实验名称 消除一切左递归 实验时间 2020年5月27日 到 2020年5月31日 院系 信息科学与工程学院 组员姓名 Chocolate.kry2025.钟先生.leo.小 ...

最新文章

  1. 求补码表示为10000000的真值
  2. 简单01背包 POJ3211 Washing Clothes 多种衣服分别dp
  3. Tableau必知必会之如何用颜色 突显 前N项和后N项
  4. Yet Another Broken Keyboard
  5. 实现Servlet虚拟路径的映射
  6. perl java远程调用函数调用_如何从Java调用Perl?
  7. ue4加载本地版本_ue4本地服务器
  8. Matlab科研绘图颜色补充(特别篇5)—176种美国传统颜色
  9. neo4j实现Louvain算法
  10. 采用Zigbee和Raspberry Pi的太阳能/燃气热水器自动控制系统
  11. band math函数_波段运算(bandmath)工具中常用的函数
  12. matlab神经网络工具箱教程,matlab神经网络能做什么
  13. 井字棋游戏 Matlab
  14. ctfshow 做题 MISC入门 模块 31-40
  15. 电脑可以连接手机热点,却无法连路由器无线wifi
  16. mmdetection3D---(1)
  17. 【浅谈爬虫】一名合格的Python爬虫工程师必须具备技能—具体了解四大Python爬虫分类以及爬虫基本原理实现
  18. Android灯光系统框架分析
  19. lisp语言与python_5种语言混合编程:C 、JS、python、Lisp、汇编
  20. 类似于 qq发说说动态 基于原生servlet 后台方案

热门文章

  1. python基本快捷键
  2. FreeImage的配置与使用
  3. 亚马逊美国买家账号注册流程
  4. navcat定时备份mysql_Navicat for MySQL定时备份数据库及数据恢复
  5. RoboWare Studio 安装教程与可能问题解决
  6. error: L6002U: Could not open file .\objects\startup_stm32f10x_hd.o
  7. 安装opencv、测试opencv
  8. 《人人都是产品经理》读书笔记
  9. 计算机网络技术实训课程报告,大学网络技术基础课程的实训报告怎么写?
  10. 思科模拟器GNS3将路由器变成交换机的方法