编译原理 实验3 递归下降语法分析程序设计

实验目的】

       练习构造递归下降语法分析程序的方法,熟悉上下文无关文法的使用,加深对课堂教学的理解;提高语法分析方法的实践能力

【实验要求】

    利用某一高级程序设计语言构造语法分析程序  

【具体要求】对于给定的文法G[E]

              E->TE’

             E’->+TE’ | ε

            T->FT’

            T’->*F T’| ε

            F->(E) | i

     采用递归下降语法分析法编写语法分析程序,该语法分析程序判断输入的字符串是否符合上述文法,并能够输出相应的结果(是语法成分或不是语法成分)。

 

#include
/* 
    实验名称:实验3  递归下降语法分析程序设计 
    学号: 
    姓名:niu91(859222829) 
    班级: 
*/
#include
char str[10];
int index=0;
void E();			//E->TX;
void X();			//X->+TX | e
void T();			//T->FY
void Y();			//Y->*FY | e
void F();			//F->(E) | i
int main()
{
	int len;
	int m;
	printf("请输入要测试的次数:");
	scanf("%d",&m);
	while(m--)
	{
		printf("请输入算数表达式:");
		scanf("%s",str);
		len=strlen(str);
		str[len]='#';
		str[len+1]='\0';
		E();
		printf("正确语句!\n");
		strcpy(str,"");
		index=0;
	}
	return 0;
}
void E()
{
    T();
    X();
}
void X()
{
	if(str[index]=='+')
	{
	    index++;
		T();
		X();
	} 
}
void T()
{
	F();
	Y();
}
void Y()
{
	if(str[index]=='*')
	{
        index++;
		F();
		Y();
	}
}
void F()
{
	if(str[index]=='i')
	{
		index++;
	}
	else if (str[index]=='(')
	{	 
		index++;
		E();
		if(str[index]==')')
		{
			index++; 
		}else{
			printf("\n分析失败!\n");
			exit (0);
		}
	} 
	else{
		printf("分析失败!\n"); 
		exit(0);
	}
 }

 

 

 

你可能感兴趣的:(编译与链接)