📄 diguixiajiang.c
字号:
#include<stdio.h>
#include<stdlib.h>
#define MAX_SIZE 20 //
int E(char* in,int* ip);
int G(char* in,int* ip);
int T(char* in,int* ip);
int S(char* in,int* ip);
int F(char* in,int* ip);
int E(char* in,int* ip)
{
printf("E->TG\n");
if(T(in,ip));else printf("Error in E.\n"),exit(1);//执行子过程T
if(G(in,ip));else printf("Error in E.\n"),exit(1);//执行子过程G,其他过程类似
return -1;
}
int G(char* in,int* ip)
{
if(in[*ip]=='+'){
printf("G->+TG\n");
*ip=*ip+1;
if(T(in,ip));else printf("Error in G.\n"),exit(1);
if(G(in,ip));else printf("Error in G.\n"),exit(1);
return -1;
}
else if(in[*ip]=='-'){
printf("G->-GT\n");
*ip=*ip+1;
if(T(in,ip));else printf("Error in G.\n"),exit(1);
if(G(in,ip));else printf("Error in G.\n"),exit(1);
return -1;
}
else {printf("G->empty\n");return -1;}
}
int T(char* in,int* ip)
{
printf("T->FS\n");
if(F(in,ip));else printf("Error in E.\n"),exit(1);
if(S(in,ip));else printf("Error in E.\n"),exit(1);
return -1;
}
int S(char* in,int* ip)
{
if(in[*ip]=='*'){
printf("S->*FS\n");
*ip=*ip+1;
if(F(in,ip));else printf("Error in S.\n"),exit(1);
if(S(in,ip));else printf("Error in S.\n"),exit(1);
return -1;
}
else if(in[*ip]=='/'){
*ip=*ip+1;
printf("S->/FS\n");
if(F(in,ip));else printf("Error in S.\n"),exit(1);
if(S(in,ip));else printf("Error in S.\n"),exit(1);
return -1;
}
else {printf("S->empty\n");return -1;}
}
int F(char* in,int* ip)
{
if(in[*ip]=='('){
printf("F->(E)\n");
*ip=*ip+1;
if(E(in,ip));else printf("Error in F.\n"),exit(1);
if(in[*ip]==')'){*ip=*ip+1;return -1;}
else printf("Expect an ')' but found %s\n",in+*ip),exit(1);
}else if(in[*ip]=='i'){printf("F->i\n");*ip=*ip+1;return -1;}
else {printf("Expect an 'i' but found %s\n",in+*ip);exit(1);}
}
int main(void)
{
char in[MAX_SIZE];
int i=0,ip=0;
printf("递归下降分析程序,制作人:\n");
printf("输入以#结束的字符串,包括字符+,-,*,/,(,),i:\n");
scanf("%s",in);
for(i=0;in[i]!='#'&&in[i]!='\0';i++)
if(in[i]!='i'&&in[i]!='+'&&in[i]!='-'&&in[i]!='*'&&in[i]!='/'&&in[i]!='('&&in[i]!=')')
printf("Illegal charactor %c",in[i]);
if(E(in,&ip))
if(in[ip]=='#')
printf("%s 是合法字符串\n",in,ip);
else printf("Extra letters %s.\n",in+ip);
else printf("Not Accepted");
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -