编译原理——语法分析实验报告

、实验要求:
编写代码实现程序的语法分析。

二、实验代码:
#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);
}

}

三、实验结果:
编译原理——语法分析实验报告_第1张图片
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200425000316240.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyMzM0Mzg0,size_16,color_FFFFFF,t_70

你可能感兴趣的:(编译原理)