一.前言

又到了一周一度的编译原理实验课,一次实验课上完了,又是大学生必备技能—写实验报告。行了,废话不多说,我直接展现,如何实现编译原理中词法分析的递归下降分析法实例–能被5整除的二进制数的思路。作为信奉“less is more”的人来说,说明能简单就简单啦!!大家凑合着看看。

二.实验要求/题目说明

一、授课内容:
(一) 授课科目:编译原理
(二) 授课内容:实验二 递归下降分析程序设计
(三) 授课类型:实 验
二、教学目的要求:
1.目的:通过设计、编制、调试一个典型的语法分析程序,实现对词法分析程序所提供的单词序列进行语法检查和结构分析,进一步掌握常用的语法分析方法。
2.要求:
(1) 选择最有代表性的语法分析方法,算符优先法、递归子程序法和状态矩阵法之一进行实验。
(2) 选择对各种常见的程序语言都通用的语法结构,如赋值语句(尤其指表达式)作为分析对象,并且与所选语法分析方法要比较贴切。
三、教学设想:
1.教学方法设想:先以例子讲解,然后学生动手实验,实验为主。
2.教具运用设想:多媒体。
四、教学过程:

题目

编写一个递归下降子程序,实现能被5整除的二进制数的判断。若能整除则输出yes,否则输出no。 试采用具有递归功能的高级语言编制递归下降法的语法分析程序。分析过程不嵌入任何语义动作。

三.理论分析

为了省事,我直接附图。展现DFA和文法。((> <)有点小糊,大家凑合着看吧)

四.用代码实现

功能列表:
(1)输入二进制数,能判断是或否二进制数。是,输出YES; 否,输出NO。
(2)当输入不是0或1或#结束标志位的话,报错,并表明出错位置,由于哪一个字符产生的错误。
(3)#结束程序

效果图:

代码:

#include <stdio.h>
#include<string.h>
int p,tz,i;//tz标志位,1表示YES,O表示NO
char st[80];//字符串
char ch;//每次取的字符char sym()//取下一个字符
{return st[p];
}void error(int n)//报错
{printf("输入非法字符!!\n",n);
}void S();
void A();
void B();
void C();
void D();void S(){if(ch=='0'){p++;ch=sym();S();}else if(ch=='1'){p++;ch=sym();A();}else if(ch=='#'){//出口tz=1;return ;}else{return ;//直接返回,到时候报错}
}void A(){if(ch=='0'){p++;ch=sym();B();}else if(ch=='1'){p++;  ch=sym();C();}else {//非法字符return ;}
}void B(){if(ch=='0'){p++;ch=sym();D();}else if(ch=='1'){p++;ch=sym();S();}else {//非法字符return ;}
}void C(){if(ch=='0'){p++;ch=sym();A();}else if(ch=='1'){p++;ch=sym();B();}else {//非法字符return ;}
}void D(){if(ch=='0'){p++;ch=sym();C();}else if(ch=='1'){p++;ch=sym();D();}else {//非法字符return ;}
}void main()
{printf("please input expression(end with #):");gets(st);strcat(st,"#");p=0; ch=sym();/* if(ch=='#'){printf("finished\n");//exit();return ;}*/while(ch!='#')//循环,以#结束程序{S();if(ch!='#'||tz==1){if(ch!='#'){printf("%d号位错误 ,被%c字符引起错误!!,again\n",p+1,ch);}else{printf("YES!!\n");}tz=0;}else{printf("NO!!\n");}printf("please input expression (end with #):");fflush(stdin);gets(st);strcat(st,"#");p=0;ch=sym();}printf("finished\n");}

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

  1. 【编译原理-专题二】递归下降分析子程序

    编译原理-递归下降分析子程序 一.程序功能描述 给定CP语言中简单算术表达式文法G[E]: E→TE' E'→ATE'|ε T→FT' T'→MFT' |ε F→(E) | i A → + | - M ...

  2. 杭电编译原理实验-实验二-递归下降分析子程序设计

    递归下降分析子程序设计 实验目的 实验内容 函数定义 程序流程图 源代码 测试用例 实验目的   掌握最基本的自顶向下分析方法,即递归下降子程序方法,理解其特点和适用范围(回溯,左递归等现象),锻炼递 ...

  3. 《编译原理》实验报告——递归下降语法分析器的构建

    一.实验要求 运用递归下降法,针对给定的上下文无关文法,给出实验方案.预估实验中可能出现的问题. 二.实验方案 1.构造LL(1),通过设计.编制.调试递归下降语法分析程序,对输入的符号串进行分析匹配 ...

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

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

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

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

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

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

  7. lr1分析器c语言实验报告怎么写,编译原理课程的设计构造LR分析法语法分析器.doc...

    编译原理课程的设计构造LR分析法语法分析器 太 原 学 院 课程设计报告书 课程名称 设计题目 构造LR(0)分析法语法分析器 专业班级 学 号 姓 名 指导教师 2016年 12 月 15日 目 录 ...

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

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

  9. 递归下降分析法的基本思想。_语法分析 | 递归下降分析算法

    递归下降分析算法是自顶向下分析算法的一部分. 递归下降分析算法 也称为预测分析 分析高效(线性时间) 容易实现(方便手工编码) 错误定位和诊断信息准确 被很多开源和商业的编译器所采用 GCC 4.0, ...

最新文章

  1. AngularJS 指令
  2. 移动端适配之二:visual viewport、layout viewport和ideal viewport介绍
  3. Go的slice扩容机制
  4. 随便玩玩之PostgreSQL(第一章)PostgreSQL简介
  5. 12 行列式01---定义、计算 与性质、排列、逆序数、n 阶行列式、上三角形行列、矩阵的初等行变换与行列式性质
  6. 关于layui的日期和时间组件LayData时间选择器使用时一闪而过
  7. NodeJs快速入门
  8. oracle中创建视图的语句,求Oracle创建视图有关语句
  9. 泛联新安EDA系列——国内自主研发,首款集成双国军标的HDL代码缺陷管理平台VHawk
  10. java 多用组合_java 为什么说多用组合,少用继承?
  11. Google 三大论文之——MapReduce
  12. python3.6+PyQt5安装
  13. 计算机系统基础崔丽群答案,2017届部分优秀教师风采展示——崔丽群
  14. 流感病毒爆发,科技带来希望?谷歌成功预测H1N1流感病毒
  15. 【028】仿猫眼、淘票票的电影后台管理和售票系统系统(含后台管理)(含源码、数据库、运行教程)
  16. python3多线程高容错爬取头条的街拍美图
  17. undo_retentionguarantee
  18. 企业常用的Nginx网站服务相关配置
  19. pycharm虚拟环境下安装mysqlclient失败
  20. CSP2020-J2 题解 —— D题:方格取数

热门文章

  1. ios 高德挪动地图获取经纬度_高德地图获取地理位置经纬度并将经维度转化为详细地址信息...
  2. 关于python django开发过程中的常见的问题及解决办法总结
  3. Fix My iPhone Mac版:修复iPhone白苹果、黑屏、卡住恢复错误等iOS 15 升级失败
  4. MacOS Server安装与应用
  5. mqtt如何判断设备离线_污水处理设备公司给出的价格如何判断真实性?
  6. 从Scratch到C++ 从Scratch到python书籍
  7. linux安装apache+mysql+php3.8练习环境
  8. angular linux 打包不成功_Angular Library 系列之 构建和打包
  9. vue 同步加载_2019 前端面试题汇总(主要为 Vue)
  10. uniapp 支付(支付宝,微信支付)