1216 递归下降分析法--算数语法分析 由列志华提供
2015-12-16 20:15
363 查看
以下代码为列志华先生提供严禁用于商业用途,除以盈利外的转载无任欢迎!!!!!
E→E+T|E-T|T
T→T*F| T/F|F
F→(E)|i
由给定文法G(x)转化的LL1文法为:
E->TE'
E'->+TE' | -TE' | §
T->FT'
T'->*FT | /FT' | §
F->(E) | i
E→E+T|E-T|T
T→T*F| T/F|F
F→(E)|i
由给定文法G(x)转化的LL1文法为:
E->TE'
E'->+TE' | -TE' | §
T->FT'
T'->*FT | /FT' | §
F->(E) | i
#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++; }else{ curr = LL1 ; } } 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 != '(' && LL1 != ')') 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 != '(' && LL1 != ')') 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); }
相关文章推荐
- java.lang.RuntimeException: setAudioSource failed.
- MATLAB——scatter的简单应用
- openjudge放苹果
- 上拉下拉刷新(2)网络加载图片
- You Can't Manage What You Don't Measure
- 除去pdf文件内部的超链接/a标签
- viewController的生命周期
- 设置查看java的源程序
- 【Java EE 学习 70 下】【数据采集系统第二天】【Action中User注入】【设计调查页面】【Action中模型赋值问题】【编辑调查】
- Stucts应用引起的OutOfMemoryError
- 文件查找命令―find
- 消息的本质
- 12c中保持 启动CDB后PDB的状态
- 线性回归
- 谁最美妙的公司福利?男员工也有“大妈假”
- Visual Studio 2015 安装笔记
- python(1)
- picker 的简单设置
- 命名规范。
- Objective-C简单教程(入门)-从官方文档中挑选