博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
1216 递归下降分析法
阅读量:7097 次
发布时间:2019-06-28

本文共 1682 字,大约阅读时间需要 5 分钟。

/*G[E]:E->E+T|E-T|TT->T*F|T/F|FF->(E)|i左递归消除E->TE'E'->+TE'|-TE'|εT->FT'T'->*FT'|/FT'|εF->(E)|i*/#include
char sym;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("请输入需要分析的sym语法:(以#结束)\n"); do{ scanf("%c",&ch); LL1[i] = ch; i++; }while(ch != '#'); scaner(); E(); if(sym == '#') printf("成功!\n"); else{ printf("文法有误!!\n"); error(); }}void scaner(){ //用于读取源函数的下一个字符 N++; if(LL1[N] == ' '){ N++; }else{ sym = LL1[N]; }}void E(){ T(); e();}void T(){ F(); t();}void e(){ if(sym == '+'||sym == '-'){ 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(sym == '*'||sym == '/'){ 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(); }}void F(){ if(sym == '('){ scaner(); E(); if(sym == ')'){ scaner(); }else{ error(); } }else //判断是否是函数或者是数字 while(1){ if(sym >= 'a' && sym<='z' || sym >= 'A' && sym <= 'Z' || sym >= '0' && sym <= '9'){ scaner(); } else{ break; } } } void error(){ printf("第%d个 %c之后的文法有错!\n",N,sym);}

  

转载于:https://www.cnblogs.com/cjh123/p/5089227.html

你可能感兴趣的文章
Beyond Compare乱码问题汇总
查看>>
线程和线程池
查看>>
Camstar开发常用数据库表及其关联
查看>>
html中的一些按钮之类的操作
查看>>
走进 AQS 瞧一瞧看一看
查看>>
NO18 linux开机自启动设置--开机流程--中文乱码--查看行数
查看>>
Java的四种内部类
查看>>
10-16C#for...循环语句(2)
查看>>
CentOS查看软件源提供的软件版本命令
查看>>
caffe 学习记录1及网络结构
查看>>
html5学习笔记——html新增属性(四)
查看>>
收藏的链接
查看>>
【原创】5月份月会总结
查看>>
手机号码归属地查询
查看>>
IO和socket编程
查看>>
Docker结合Jenkins构建持续集成环境
查看>>
一些Android经验
查看>>
Java设计模式-适配器模式
查看>>
求任意数阶乘最后一位
查看>>
android 循环操作
查看>>