递归下降算法

自上而下文法的递归下降的预测分析。
从根节点出发逐步构造分析树,所以被称作自上而下文法,在文法中有递归的函数,例如:E’->+TE’|&。所以叫做递归下降算法。
使用的文法如下:
E -> TE ’
E ¢ -> + TE ’ | e
T ->FT ’
T ’ -> * FT ¢’| e
F -> (E) | id
使用的测试字符串为"id+id*id#"

#& 在这里表示空串#
上机题随便写的,使用的c语言,直接参考的文法分析表
总的设计就是遍历字符串,将当前字符与非终结符在表中对应的产生式输出出来

/*
第三次上机-语法分析1-递归下降
2018/10/9
*/
#include<stdio.h>
#include<string.h>
int location=0;            //遍历字符串的当前位置
char arr[20]="id+id*id#";
void error();       //错误提示函数
/*
每一个非终结符都构造一个函数
*/
void E(char t);
void Ep(char t);
void T(char t);
void Tp(char t);
void F(char t);void E(char t){if(t=='('){printf("E->TE'");printf("\n");T(arr[location]);Ep(arr[location]);}else if(t=='i'){printf("E->TE'");printf("\n");T(arr[location]);Ep(arr[location]);}else{error();location++;E(arr[location]);}
}
void T(char t){if(t=='i'){printf("T->FT'");printf("\n");F(arr[location]);Tp(arr[location]);}else if(t=='('){printf("T->FT'");printf("\n");F(arr[location]);Tp(arr[location]);}else{error();location++;T(arr[location]);}
}
void Ep(char t){if(t=='+'){printf("E'->+TE'");printf("\n");location++;T(arr[location]);Ep(arr[location]);}else if(t==')'){printf("E'->&");printf("\n");}else if(t=='#'){}else{error();if(t=='i')location+=2;elselocation++;Ep(arr[location]);}
}
void Tp(char t){switch(t){case '+':printf("T'->&");printf("\n");break;case '*':printf("T'->*FT'");printf("\n");location++;F(arr[location]);Tp(arr[location]);break;case ')':printf("T'->&");printf("\n");break;case '#':printf("T'->&");printf("\n");break;default:error();if(t=='i')location+=2;elselocation++;Tp(arr[location]);break;}
}
void F(char t){if(t=='i'){printf("F->id");printf("\n");location+=2;}else if(t=='('){printf("F->(E)");printf("\n");}else{error();location++;F(arr[location]);}
}
void error(){printf("有一个错误,略过当前词法记号");printf("\n");
}
int main(){E(arr[location]);
}
``

递归下降算法语法分析c语言相关推荐

  1. 实验2 递归下降语法分析程序设计

    [开发语言及实现平台或实验环境] C++/Clion [实验目的] (1)理解语法分析在编译程序中的作用,以及它与词法分析程序的关系 (2)加深对递归下降语法分析原理的理解 (3)掌握递归下降语法分析 ...

  2. 基于C++的递归下降语法分析设计原理与实现

    资源下载地址:https://download.csdn.net/download/sheziqiong/85949206 资源下载地址:https://download.csdn.net/downl ...

  3. 汉诺塔——经典递归问题(c语言实现)

    汉诺塔--经典递归问题(c语言实现) 问题背景 汉诺塔问题是一个经典的问题.汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下 ...

  4. 【Compile】递归下降语法分析(C++)

    实验题目 编写识别由下列文法G[E]所定义的表达式的递归下降语法分析器. E→E+T∣E−T∣TE \rightarrow E+T | E-T | TE→E+T∣E−T∣T T→T∗F∣T/F∣FT ...

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

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

  6. 汉诺塔(Tower of Hanoi) 递归代码实现 c语言(顺序栈实现)

    文章目录 c语言简化版 C语言强化版(能看到每一步每个塔的情况)(使用了顺序栈库) main.c sequential_stack.cpp sequential_stack.h 运行结果 找了个汉诺塔 ...

  7. python堆栈汉诺塔非递归_汉诺塔问题的递归解法和非递归解法(python语言实现)...

    汉诺塔问题的非递归解法(python语言类解法) #!/usr/bin/env python #coding:utf-8 import sys import time reload(sys) sys. ...

  8. LR1语法分析C语言代码,LR1语法分析

    LR1语法分析 Last Updated 11.28 by Nie Zili 一.数据结构简介 该项目采用面向对象的思想设计数据结构,共设有6个类,其递进关系如下: pstring,产生式类.定义了L ...

  9. c语言递归求和函数,c语言递归算法怎么实现

    递归就是一个方法自己调用自己.在编程语言中,如果一个程序允许您在同一个函数中调用一个函数,那么它就被称为函数的递归调用. void recursion() { recursion(); /* 函数调用 ...

  10. c语言递归的用法,C语言递归操作用法总结

    本文实例总结了C语言递归操作用法.分享给大家供大家参考,具体如下: 用归纳法来理解递归 步进表达式:问题蜕变成子问题的表达式 结束条件:什么时候可以不再是用步进表达式 直接求解表达式:在结束条件下能够 ...

最新文章

  1. 【数据结构】链式栈的实现(C语言)
  2. Linux shell脚本编程(三)
  3. [转贴]Integrating FrontPage and VS .NET
  4. 应用安全-操作系统安全-漏洞修复整理
  5. NS2相关学习——完成一个新的协议(1)
  6. C语言的静态数组初始化
  7. oracle获取sysdba权限,Oracle 学习笔记: SYSDBA登陆权限问题
  8. 收集:Hibernate中常见问题 No row with the given identifier exists问题的原因及解决
  9. php7 findandmodify,node.js – (mongoose / promises)如何检查文档是否是使用带有upsert的findOneAndUpdate创建的...
  10. uva11992-Fast Matrix Operations(区间增值、改值)
  11. 阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第3节 线程同步机制_3_线程安全问题产生的原理...
  12. 乐优商城(09)--商品详情
  13. 单片机原理及应用C语言实验,《单片机原理及应用》实验指导书.doc
  14. 计算机win10启动慢,详细教你解决win10开机速度慢
  15. [c语言]c语言中的#和##作用、参数表省略号作用
  16. android百度离线地图,Android SDK
  17. 实体对齐 算法_[2017]Bootstrapping Entity Alignment with Knowledge Graph Embedding
  18. 济南2022年全面实行电子劳动合同,爱签电子合同为HR赋能增效
  19. 壬辰年癸丑月丁亥日记梦
  20. 【算法-面试】区间专题

热门文章

  1. HICE-SSH使用RSA认证方式进行登陆
  2. Java集合容器面试题(2022版本)
  3. 神舟笔记本电脑更改启动盘顺序
  4. Docker 下载安装使用(简单教程)
  5. Mac用Homebrew安装libimobiledevice
  6. 双轴旋转云台plc控制_Robomaster电控入门(7)双轴云台控制
  7. c语言实数的输出和占位_C语言输出格式总结
  8. Arduino学习(一)蓝牙模板之JDY-16 BLE(1)
  9. wx.uploadFile上传图片 在正式环境无响应问题
  10. 安卓学习pdf_【手机电脑全平台通用】手把手教你制作可点读日语PDF!