编译原理实验——递归下降分析法(回溯)

1、实验目的与内容

采用递归下降分析法,根据下列文法内容编写程序:

E → TE’
E’ → ATE’|ε
T → FT’
T’ → MFT’ |ε
F → (E) | i
A → + | -
M → * | /

输入:一个表达式,例如”i*i+i-i“。

输出:该表达式的分析,例如(打印是倒着的):

2、程序总体设计思路和框架

无回溯递归下降分析要先手动求出select集,为了避免手动求解的麻烦(主要是懒),采用有回溯递归下降分析的方法。

根据产生式编写函数,一个产生式对应一条函数。有多个候选式的情况下,默认产生式选择第一条候选式,如果推出错误,回溯时选择下一条候选式。

函数退出递归的条件以及回溯的状态重置,这是主要的难点。

3、主要的数据结构和流程描述

为了打印出上图所示的结果,每一条使用一个信息节点(info_node)来表示。

struct info_node //保存分析步骤的信息
{//int steps_number;//分析步骤号string grammer; //用到的语法string hv_ana;  //已经分析过的字符串char bi_ana;    //正在分析的字符string rem_str; //剩余的字符串info_node(/*int steps_number,*/ string grammer, string hv_ana, char bi_ana, string rem_str){//this->steps_number = steps_number;this->grammer = grammer;this->hv_ana = hv_ana;this->bi_ana = bi_ana;this->rem_str = rem_str;}
};

没进行一次推导,就产生一个node,存放推导使用的文法,已分析的串,正在分析的字符以及未分析的串。

4、测试结果与说明

一个正确的测试例子如1,下面显示一个错误的测试例子:

输入:i*

输出:

5、实验收获与反思

加强了写回溯算法的能力。

附录

代码地址

编译原理实验——递归下降分析法(回溯)相关推荐

  1. 编译实验 lr c语言代码,编译原理-实验5-LR(1)分析法

    <编译原理-实验5-LR(1)分析法>由会员分享,可在线阅读,更多相关<编译原理-实验5-LR(1)分析法(6页珍藏版)>请在人人文库网上搜索. 1.编译原理实验报告项目名称 ...

  2. 编译原理|递归下降分析子程序

    递归下降分析子程序 一.实验目的 掌握最基本的自顶向下分析方法,即递归下降子程序方法,理解其特点和适用范围(回溯,左递归等现象),锻炼递归调用程序的构造方法. 二.实验内容 给定CP语言中简单算术表达 ...

  3. 编译原理实验-递归下降语法分析器的构建

    实验目的: 针对给定的上下文无关文法,编制一个递归下降分析程序. 分析: 递归下降语法分析的前提是保证LL(1)文法 递归下降的思路就是暴力dfs.对每个程序直接不管三七二十一搜进去,只要能搜到就继续 ...

  4. 递归下降分析法(编译原理)

    递归下降分析法的实现方案 递归下降分析法的原理是利用函数之间的递归调用模拟语法树自上而下的构造过程,具体实现方法概述如下: 1)每个非终结符对应一个解析函数: 2)产生式右侧为该产生式左侧非终结符所对 ...

  5. 编译原理中词法分析的递归下降分析法实例--能被5整除的二进制数---c语言实现

    一.前言 又到了一周一度的编译原理实验课,一次实验课上完了,又是大学生必备技能-写实验报告.行了,废话不多说,我直接展现,如何实现编译原理中词法分析的递归下降分析法实例–能被5整除的二进制数的思路.作 ...

  6. 最全!最完整的递归下降分析法代码!!! (实验报告,代码)

    根据某一文法编制调试递归下降分析程序,以便对任意输入的符号串进行分析.本次实验的目的主要是加深对递归下降分析法的理解. 程序要求: 程序输入/输出示例: 对下列文法,用递归下降分析法对任意输入的符号串 ...

  7. 【编译原理】递归下降的预测分析(真の能看懂~!)

    文章目录 1 递归下降分析法 2 过程 3 示例 3.1 主函数 3.2 PROGRAM 3.3 DECLIST 3.4 DECLISTN 1 递归下降分析法 递归下降分析法是确定的自上而下分析法,这 ...

  8. 递归下降分析法实现强化计算器

    一. 实验概述 1.使用bison 和 flex 实现扩展版计算器 该计算器支持实型的两种表达,分别是小数和科学计数法. 该计算器支持 加, 减, 乘 除 四种运算 和括号()运算符. 该计算器支持整 ...

  9. 语法分析:自上而下分析(递归下降分析法+预测分析法)

    语法分析:自上而下分析 目录 语法分析:自上而下分析 知识背景 递归下降分析法 内容一:根据文法生成子程序 内容二:调用文法开始符号所对应的子程序 预测分析法 内容一:构造预测分析表 内容二:预测分析 ...

  10. 编译原理 词法分析 算符优先分析法

    编译原理 词法分析 算符优先分析法 实验目的 加深对语法分析器工作工程的理解,加强对算符优先分析法实现语法分析程序的掌握:能够采用一种编程语言实现简单的语法分析程序:能够使用自己辨析的分析程序对简单的 ...

最新文章

  1. 阿里云服务器 安全狗外部访问mysql_阿里云linux/centos服务器安全狗安装
  2. jenkins访问页面是那个html,Jenkins自动化代码上线-静态网页篇
  3. Spring、SpringMVC、SpringBoot、SpringCloud的联系和区别
  4. 使用PXE+NFS EFI引导安装RHEL6/7以及Kickstart安装
  5. android室内定位+3d,基于Android平台的手机室内定位及导航的设计与实现
  6. linux账号相关文档解读
  7. 哎,最近心情非常烦乱!
  8. 拼多多市值超2100亿美元 黄峥成中国第二大富豪
  9. 揭秘React同构应用
  10. word 转html回显至富文本编辑器中(渲染页面)——mammoth.js
  11. NAT映射和代理服务器
  12. 线性方程组求解——基于MTALAB/Octave,Numpy,Sympy和Maxima
  13. 如何在Chrome浏览器中导入和导出密码
  14. 素数筛(c语言实现)
  15. ukf(无迹卡尔曼滤波)算法的matlab程序.
  16. matlab半小提琴图,4.4 小提琴图
  17. 简述人工神经网络的定义,简述神经网络算法
  18. 51信用卡清退P2P业务,大量资金逾期!投资人或难保本金
  19. leetcode1568. 使陆地分离的最少天数(Python3、c++)
  20. gitHub客户端Desktop的安装使用总结 ---基础篇

热门文章

  1. 实习一个月,自我总结
  2. Cascade:自动化测试“旅程”
  3. 详解DHT11温湿度传感器的原理及驱动程序
  4. 【Linux】 浅谈 NCSI 及其在 Linux 上的实现
  5. 如何玩Chrome的小恐龙游戏
  6. Chrome 小恐龙
  7. 2018 6月底阿里、网易面试经历简单回忆
  8. 自定义PPT背景的大小
  9. 如何在PPT中制作动态图表,学会这种方法实在太简单
  10. PX4 ---- Mixer