12.30递归下降分析
2015-12-31 23:37
281 查看
#include<stdio.h> #include<string.h> char str[10]; int index=0; void E(); //E->TX; void X(); //X->+TX|-TX| e void T(); //T->FY void Y(); //Y->*FY |/fy| e void F(); //F->(E) | id int id(); //id int main() { int len; int m; printf("请输入算数表达式:"); scanf("%s",str); len=strlen(str); str[len]='#'; str[len+1]='\0'; E(); printf("正确语句!\n"); strcpy(str,""); index=0; return 0; } void E() { T(); X(); } void X() { if(str[index]=='+') { index++; T(); X(); } else if(str[index]=='-') { index++; T(); X(); } } void T() { F(); Y(); } void Y() { if(str[index]=='*') { index++; F(); Y(); } else if(str[index]=='/') { index++; F(); Y(); } } void F() { if(id()) { index++; } else if (str[index]=='(') { index++; E(); if(str[index]==')') { index++; }else{ printf("\n分析失败!\n"); exit (0); } } else{ printf("分析失败!\n"); exit(0); } } int id() { if(str[index]>='0'&&str[index]<='9') { while( str[index+1]>='0'&&str[index+1]<='9' ) { index++; } if(str[index+1]>='a'&&str[index+1]<='z' ) return 0; return 1; } else if(str[index]>='a'&&str[index]<='z' ) { return 1; } else return 0; }
相关文章推荐
- 2015年总结
- 【翻译自mos文章】在db 12c 单机中不能注册ACFS为自动启动
- NSFileManager的用法深入(一)
- [DataStructure]稀疏矩阵的三元组存储及乘法运算
- System Center 2016 VMM 新功能之存储QoS策略
- 网页兼容相关
- 一些不错的编程学习网站
- leetcode笔记:Palindrome Number
- ORACLE ROWNUM解析[转]
- OpenKeeper的一点小问题
- electrica writeup
- 硬盘盘符拒绝访问-问题和解决办法
- 评教系统优化之使用事务批量导入DataTable
- 再见,2015
- 图解Linux命令之--modprobe命令
- Android快速开发框架
- Android快速开发框架
- 《FS Book》: 如何让圣诞节邮件营销与众不同
- 灵活使用Excel可能会提高Java代码编写效率
- android数据库sqlite的简单总结