#include<stdio.h>
char curr;
char LL1[1000];
int N=-1;

void T();
void E();
void F();
void e();
void t();
void error();
void scaner();

void main()
{ char ch;
int i=0;
printf("请输入需要分析的curr语法:(以#结束)\n");
do{
scanf("%c",&ch);
LL1[i] = ch;
i++;
}while(ch != '#');
scaner();
E();
if(curr == '#')
printf("成功!\n");
else{
printf("文法有误!!\n");
error();
}

}

void scaner(){ //用于读取源函数的下一个字符

N++;
if(LL1[N] == ' '){
N++;
}else{
curr = LL1[N];
}
}

void E(){
T();
e();
}
void T(){
F();
t();
}

void e(){
if(curr == '+'){
scaner();
T();
e();
}
else if(curr == '-'){
scaner();
T();
e();
}else if(LL1[N+1] == '#' || LL1[N+1] == '+' || LL1[N+1] == '/' || LL1[N+1] == '*' || LL1[N+1] == '-'){
if(LL1[N] != '(' && LL1[N] != ')')
error();
}
}

void t(){
if(curr == '*'){
scaner();
F();
T();
}else if(curr == '/'){
scaner();
F();
T();
}else if(LL1[N+1] == '#' || LL1[N+1] == '+' || LL1[N+1] == '/' || LL1[N+1] == '*' || LL1[N+1] == '-'){
if(LL1[N] != '(' && LL1[N] != ')')
error();
}
}
//LIE ZHI HUA TI GONG TAI MA
void F(){
if(curr == '('){
scaner();
E();
if(curr == ')'){
scaner();
// printf("111111");
}else{
error();
}
}else{
//判断是否是函数或者是数字
//error();
while(1){
if(curr >= 'a' && curr<='z' || curr >= 'A' && curr <= 'Z' || curr >= '0' && curr <= '9'){
scaner();
}else{
break;
}
}
}
}

void error(){
printf("%d %c之后的文法有错!\n",N,curr);
}

转载于:https://www.cnblogs.com/chenkaiqi/p/5089238.html

递归下降分析法--算数语法分析相关推荐

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

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

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

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

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

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

  4. 利用递归下降分析方法完成语法分析

    一. 程序设计题目与说明 利用递归下降分析方法完成语法分析. 递归下降分析法是一种自顶向下的分析方法,文法的每个非终结符对应一个递归过程(函数).分析过程就是从文法开始符出发执行一组递归过程(函数), ...

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

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

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

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

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

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

  8. 递归下降分析法的基本思想。_还不懂这八大算法思想,刷再多题也白搭!

    各位朋友好久不见呢.最近由于刚入职,作为职场萌新,所以大部分时间都花在了工作上.因而也没有太多时间来写文章啦,这篇文章也是定题了许久,迟迟没有落笔.等之后工作慢慢稳定,业务熟练起来,文章更新频率就会高 ...

  9. 自上而下的语法分析-递归下降分析和LL(1)文法

    对输入的任意单词符号串,试图用一切可能的办法,从文法开始符号(树根)出发,自上而下.自左而右地建立起一棵语法分析树,使得该树的叶结点自左而右地排列起来,刚好就是所给的输入串.显然,这一过程应该与一个最 ...

最新文章

  1. java中普通代码块,构造代码块,静态代码块的区别及代码示例
  2. 关于对cpu的理解和kvm虚拟机到物理cpu的绑定
  3. 文本去重之MinHash算法——就是多个hash函数对items计算特征值,然后取最小的计算相似度...
  4. 【OpenCV3】OpenCV3.0 在WIN8+VS2012环境下的配置
  5. 【简洁易懂】Filter的四种拦截方式
  6. 冒泡排序python例题_零基础学python 15 经典算法:冒泡排序法(课后习题答案)...
  7. 23岁研究生校内坠亡!家人称导师经常辱骂讽刺他,事件涉及两所高校!
  8. python图像分割算法_OpenCV-Python 图像分割与Watershed算法 | 三十四
  9. 【Elasticsearch】es keywods 类型数据 写入后查询不到
  10. 浅谈三层架构 通过这个,+Java开发模式经验。终于相通了,动软到底是为什么这么做...
  11. mysql 工具 国产_推荐一款国产化比较好用的数据可视化工具(BI工具)
  12. 8 种单例模式写法,助你搞定面试!
  13. java算法训练 调和数列问题
  14. 1.0版走迷宫小游戏(C++)
  15. CentOS利用WebHook实现PHP自动部署Git代码
  16. sql 闩锁 原因_关于SQL Server中的闩锁
  17. iOS开发 --- AlipaySDK接入(version:15.6.4 motify:2019.06.11)
  18. 机器学习基石 5.3 Effective Number of Hypotheses
  19. Android Studio 项目依赖由于资源在国外而下载不了的问题
  20. [林达华]介绍几本数学书

热门文章

  1. 前端工程化系列[06]-Yeoman脚手架核心机制
  2. win10 中redis client提示 ERR Client sent AUTH,but no password is set
  3. SaltStack入门(二)Grains、NoteGroup和State
  4. 动态参数与静态参数的判断、修改
  5. JavaScript系列文章:自动类型转换
  6. 视频压缩算法的相关知识
  7. 提升tomcat 性能的经验
  8. c#属性的相关学习总结。
  9. CPSR和SPSR(转)
  10. JAVA class.getResource()的用法