1223递归
2015-12-23 17:50
393 查看
#include<stdio.h> char curr; char LL1[1000]; int N=-1; void Top(); void Top1(); void Top2(); void top(); void top1(); 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(); Top1(); if(curr == '#') printf("成功!\n"); else{ printf("文法有误!!\n"); error(); } } void scaner(){ //用于读取源函数的下一个字符 N++; if(LL1 == ' '){ N++; }else{ curr = LL1 ; } } void Top(){ Top2(); top(); } void Top1(){ Top(); top1(); } void Top2(){ if(curr == '('){ scaner(); Top1(); if(curr == ')'){ scaner(); } else { error(); } else { //判断是否是函数或者是数字 while(1){ if(curr >= 'a' && curr<='z' || curr >= 'A' && curr <= 'Z' || curr >= '0' && curr <= '9'){ scaner(); } else { break; } } } } void top(){ if(curr == '*'){ scaner(); Top2(); Top(); }else if(curr == '/'){ scaner(); Top2(); Top(); }else if(LL1[N+1] == '#' || LL1[N+1] == '+' || LL1[N+1] == '/' || LL1[N+1] == '*' || LL1[N+1] == '-'){ if(LL1 != '(' && LL1 != ')') error(); } } void top1(){ if(curr == '+'){ scaner(); Top(); top1(); } else if(curr == '-'){ scaner(); Top(); top1(); }else if(LL1[N+1] == '#' || LL1[N+1] == '+' || LL1[N+1] == '/' || LL1[N+1] == '*' || LL1[N+1] == '-'){ if(LL1 != '(' && LL1 != ')') error(); } } void error(){ printf("%d %c之后的文法有错!\n",N,curr); }
相关文章推荐
- Django之路: 基本命令与网址进阶
- Xcode LLDB Debug教程
- C++权限继承方式对权限的影响
- shiro 认证流程
- 使用单例类进行背景音乐播放
- Objective-C中的instancetype和id区别
- iOS摄像头和相册
- Android自动化测试(MonkeyRunner)
- 了解Spring @Around使用及注意
- Maven坐标和依赖(三)
- 关于URL编码
- 存储过程中使用事务,sql server 事务,sql事务
- 列表行拖拽效果
- 工作流activi链接地址
- 网络编程之IO复用:select or epoll
- Excel文件创建HIVE表
- myeclipse颜色设置问题
- CALayer_01
- 表单验证(email,手机号,座机等)
- StringBuilder[] 作为数组如何使用