您的位置:首页 > 其它

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

2013-06-23 16:05 1001 查看
实验目的】
练习构造递归下降语法分析程序的方法,熟悉上下文无关文法的使用,加深对课堂教学的理解;提高语法分析方法的实践能力
【实验要求】
利用某一高级程序设计语言构造语法分析程序

【具体要求】对于给定的文法G[E]
E->TE’
E’->+TE’ | ε
T->FT’
T’->*F T’| ε
F->(E) | i
采用递归下降语法分析法编写语法分析程序,该语法分析程序判断输入的字符串是否符合上述文法,并能够输出相应的结果(是语法成分或不是语法成分)。


#include<stdio.h>
/* 
    实验名称:实验3  递归下降语法分析程序设计 
    学号: 
    姓名:niu91(859222829) 
    班级: 
*/
#include<string>
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);
	}
 }




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: