1230递归下降语法分析
2015-12-31 18:43
369 查看
#include<stdio.h>
#include<string>
char str[10];
int index=0;
void E();
void X();
void T();
void Y();
void F();
int main()
{
int len;
printf("请输入表达式:");
scanf("%s",str);
len=strlen(str);
str[len]='#';
str[len+1]='\0';
E();
printf("正确语句!\n");
strcpy(str,""); //strcpy复制字符串
index=0;
return 0;
}
void E()
{
T();
X();
}
void X()
{
if(str[index]=='+'||str[index]=='-')
{
index++;
T();
X();
}
}
void T()
{
F();
Y();
}
void Y()
{
if(str[index]=='*'||str[index]=='/')
{
index++;
F();
Y();
}
}
void F()
{
if(str[index]>='a'&&str[index]<='z')
{
index++;
}
else if (str[index]=='(')
{
index++;
E();
if(str[index]==')')
{
index++;
}else{
printf("\n分析失败!\n");
exit (0);
}
}
else{
printf("分析失败!\n");
exit(0);
}
}
#include<string>
char str[10];
int index=0;
void E();
void X();
void T();
void Y();
void F();
int main()
{
int len;
printf("请输入表达式:");
scanf("%s",str);
len=strlen(str);
str[len]='#';
str[len+1]='\0';
E();
printf("正确语句!\n");
strcpy(str,""); //strcpy复制字符串
index=0;
return 0;
}
void E()
{
T();
X();
}
void X()
{
if(str[index]=='+'||str[index]=='-')
{
index++;
T();
X();
}
}
void T()
{
F();
Y();
}
void Y()
{
if(str[index]=='*'||str[index]=='/')
{
index++;
F();
Y();
}
}
void F()
{
if(str[index]>='a'&&str[index]<='z')
{
index++;
}
else if (str[index]=='(')
{
index++;
E();
if(str[index]==')')
{
index++;
}else{
printf("\n分析失败!\n");
exit (0);
}
}
else{
printf("分析失败!\n");
exit(0);
}
}
相关文章推荐
- springMVC @Value 注解取不到值
- Android代码风格
- 【iOS】去掉Tabbar顶部线条
- 【PHP】PHP转换图片为ico格式源码
- 用stuff 写sql 函数,查询拼装出某列数据中的所有数字。
- STL中vector的capacity、size、reserve、resize
- BI
- 邻接矩阵存储结构,深度,广度遍历。
- 【机房收费系统】——工厂
- servlet生命周期以及工作原理
- 支付宝集成获取私钥与公钥
- 如何使用NSOperation
- 我眼中的c++编程总结-20150602
- unity4.6_摄像机跟随模式、观察模式融合(平滑)
- Android学习笔记:使用SurfaceView制作简单游戏(1)
- 使用代码刷QQ的跨年红包
- 使用代码刷QQ的跨年红包
- PHP函数
- cocostduio Text 控件 添加监听无法响应
- spark-streaming系列------- 5. Spark-Streaming checkpoint的原理和实现