、实验要求:
编写代码实现程序的语法分析。
二、实验代码:
#include “stdio.h”
/*
E->TA
A->TA|ε
T->FB
B->*FB|ε
F->i|(E)
*/
void E(char str[80],int &i,int &error);
void A(char str[80],int &i,int &error);
void T(char str[80],int &i,int &error);
void V(char str[80],int &i,int &error);
void F(char str[80],int &i,int &error);
void B(char str[80],int &i,int &error);
void main(){
int i=0,j=0,error=0;
char str[80];
printf("请输入字符串('#'为结束符):");
while((str[j]=getchar())!='#')
j++;
str[j]='#';
E(str,i,error);
if(error)
printf("error\n");
else
printf("right\n");
}
void E(char str[80],int &i,int &error){
printf("E->TA\n");
T(str,i,error);
A(str,i,error);
}
void A(char str[80],int &i,int &error){
if (str[i]=='+'){
printf("A->+TA|ε\n");
i++;
T(str,i,error);
A(str,i,error);
}
else if(str[i]=='#'||str[i]==')'){}
else
error;
}
void T(char str[80],int &i,int &error){
printf("T->FB\n");
F(str,i,error);
B(str,i,error);
}
void B(char str[80],int &i,int &error){
if(str[i]=='*'){
printf("B->*FB|ε\n");
i++;
F(str,i,error);
B(str,i,error);
}
}
void F(char str[80],int &i,int &error){
if(str[i]==')'){
printf("F->i|(E)\n");
i++;
E(str,i,error);
if(str[i]==')'){
i++;
}
else
error++;
}
else{
if(str[i]=='i'){
printf("F->i|(E)\n");
i++;
}
else
B(str,i,error);
}
}
三、实验结果:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200425000316240.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyMzM0Mzg0,size_16,color_FFFFFF,t_70