递归下降语义分析
2016-01-06 16:32
260 查看
#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; }
相关文章推荐
- 做过的并查集集合
- java 冒泡排序
- spring mvc 源码要点1
- PostgreSQL学习手册(事物隔离)
- 互联网寒冬NO前方有光便能闯出一片灿烂
- Python Socket 编程——聊天室示例程序
- Android应用开发基础篇(16)-----ScaleGestureDetector(缩放手势检测)
- 第1章第1节练习题3 删除指定元素
- JAVA WEB前端杂汇
- ORA-01000: 超出打开游标的最大数 问题的分析和解决
- 泛型数组列表与反射
- 自定义UIView动画效果
- 容斥原理
- Android初学习 - AsyncTask的一些介绍I
- 做过的最短路径集合
- android使用5.0的toolbar,自定义布局参考地址
- 【bzoj4320】【ShangHai2006 Homework】【并查集+离线处理】
- 【poj2823】Sliding Window
- python 實現楊輝三角
- 利用反射实现对sqlite3数据库的crud(增删改查)操作的一个baseAndroidDao封装,安卓开发中