1230递归下降语法分析程序设计
2016-01-06 16:27
246 查看
#include<stdio.h>
#include<string.h>
int i,t=1;
char a[100];
void E();
void E1();
void T();
void T1();
void F();
void E()
{
T();
E1();
}
void T()
{
F();
T1();
}
void E1()
{
if(a[i]=='+'||a[i]=='-')
{
i++;
T();
E1();
}
else if(a[i]=='#'||a[i]==')')
{
i++;
}
}
void T1()
{
if(a[i]=='*'||a[i]=='/')
{
i++;
F();
T1();
}
else if(a[i]=='#'||a[i]==')')
{
i++;
}
}
void F()
{
int d;
if((a[i]<='z'&&a[i]>='a')||(a[i]<='Z'&&a[i]>='A'))
{
if((a[i++]<='z'&&a[i++]>='a')||(a[i++]<='Z'&&a[i++]>='A'))
i++;
else
{
printf("\n分析失败!\n");
t=0;
}
}
if(a[i]<='9'&&a[i]>='0')
{
if(a[i++]<='9'&&a[i++]>='0')
i++;
else
{
printf("\n分析失败!\n");
t=0;
}
}
else if(a[i]=='(')
{
E();
if(a[i]==')')
{
i++;
}
else
{
printf("\n分析失败!\n");
exit (0);
}
}
else
{
printf("\n分析失败!\n");
exit (0);
}
}
int main()
{
int len,d;
start:printf("请输入表达式:\n");
scanf("%s",a);
len=strlen(a);
a[len]='#';
a[len+1]='\0';
E();
if(t==1)
{
printf("是正确的表达式\n");
}
printf("是否重试?重试输入1:");
scanf("%d",&d);
if(d=1)
goto start;
return 0;
#include<string.h>
int i,t=1;
char a[100];
void E();
void E1();
void T();
void T1();
void F();
void E()
{
T();
E1();
}
void T()
{
F();
T1();
}
void E1()
{
if(a[i]=='+'||a[i]=='-')
{
i++;
T();
E1();
}
else if(a[i]=='#'||a[i]==')')
{
i++;
}
}
void T1()
{
if(a[i]=='*'||a[i]=='/')
{
i++;
F();
T1();
}
else if(a[i]=='#'||a[i]==')')
{
i++;
}
}
void F()
{
int d;
if((a[i]<='z'&&a[i]>='a')||(a[i]<='Z'&&a[i]>='A'))
{
if((a[i++]<='z'&&a[i++]>='a')||(a[i++]<='Z'&&a[i++]>='A'))
i++;
else
{
printf("\n分析失败!\n");
t=0;
}
}
if(a[i]<='9'&&a[i]>='0')
{
if(a[i++]<='9'&&a[i++]>='0')
i++;
else
{
printf("\n分析失败!\n");
t=0;
}
}
else if(a[i]=='(')
{
E();
if(a[i]==')')
{
i++;
}
else
{
printf("\n分析失败!\n");
exit (0);
}
}
else
{
printf("\n分析失败!\n");
exit (0);
}
}
int main()
{
int len,d;
start:printf("请输入表达式:\n");
scanf("%s",a);
len=strlen(a);
a[len]='#';
a[len+1]='\0';
E();
if(t==1)
{
printf("是正确的表达式\n");
}
printf("是否重试?重试输入1:");
scanf("%d",&d);
if(d=1)
goto start;
return 0;
相关文章推荐
- 关于WifiManager的一些看法
- 获取UILabel上最后一个字符串的位置。获取文字长度和高度,自动换行
- App_global.asax.pdb: 另一个程序正在使用此文件,进程无法访问。
- 高程 第11章 DOM扩展
- 分布式java应用
- 主库修改lower_case_table_names导致从库中断
- 网站布局中Position属性四个值的区别和用法
- 企业使用网络电话,节约通话成本
- FlatBuffers文档
- 从键盘键入名称和体重,返回平均体重,找出最重和最轻的
- JSTL之<c:forEach>
- PostgreSQL学习手册(索引)
- 如何在CSDN博客上加入新浪微博栏目
- 字符串分割,空格分割字符串
- 用OpenGL的Image特性实现纹理数据的直接读写操作
- 单例模式
- 实践自定义UI-ViewGroup
- 【剑指offer】q34:丑数
- Day3_UI布局--FXQ
- oc语言常用的字符串函数