注意:
- 输出格式不要忘记换行
- exit(0)的使用,与return不同
- E和T候选式进入条件是要为 i 或者 ( ,否则error
- 匹配成功一个字符后指针要后移
#include<iostream>
using namespace std;
#include<stdio.h>
#include<stdlib.h>
char s[100];
int i=0;
int c=0;
void E();
void G();
void T();
void S();
void F();
void E(){
if(s[i]=='i'||s[i]=='('){
printf("%d E-->TG\n",c++);
T();G();
}
else{
printf("error\n");
exit(0);
}
}
void G(){
if(s[i]=='+'){
printf("%d G-->+TG\n",c++);
i++;
T();G();
}
else{
printf("%d G-->&\n",c++);
}
}
void T(){
if(s[i]=='i'||s[i]=='('){
printf("%d T-->FS\n",c++);
F();S();
}
else{
printf("error\n");
exit(0);
}
}
void S(){
if(s[i]=='*'){
printf("%d S-->*FS\n",c++);
i++;
F();S();
}
else{
printf("%d S-->&\n",c++);
}
}
void F(){
if(s[i]=='('){
printf("%d F-->(E)\n",c++);i++;E();
if(s[i]==')') i++;
else{
printf("error\n");
exit(0);
}
}
else if(s[i]=='i'){
i++;
printf("%d F-->i\n",c++);
}
else{
printf("error\n");
exit(0);
}
}
int main(){
scanf("%s",s);
E();
if(s[i]=='#') printf("accept\n");
else printf("error\n");
return 0;
}