程序01_语法分析(递归下降分析法)

 根据某一文法编制调试递归下降分析程序,以便对任意输入的符号串进行分析
本次文法为:

(1)E->eBaA

2A->a|bAcB

3B->dEd|aC

4C->e|dC
要求输入某一字符串后,程序能够判断是否为此文法的合法符号串

1、易求出SELECT集;
SELECT( E->eBaA)={e}
SELECT( A->a )={a}
SELECT( A->bAcB )={b}
SELECT( B->dEd )={d}
SELECT( B-> aC )={a}
SELECT( C->e )={e}
SELECT( C->dC )={d}

2、写出非终结符E、A、B、C的递归函数E();A();B();C();若str[i]不为终结符,即进入相应函数进行递归分析

3、源代码如下
#include"stdafx.h"
#include
#include
#include
#pragma warning


char str[50] = {};
int i = 0;
bool flag = true;

void E();
void A();
void B();
void C();

int main()
{
	printf("请输入一以#结束的符号串:");
	while (scanf_s("%c",&str[0])!=EOF)
	{
		int i = 0;
		for (i = 0;  str[i]!='#'; i++)
		{
			scanf_s("%c", &str[i + 1]);
		}
		//start();
		E();
		if (flag)
			printf("%s为合法符号串\n", str);
		else
			printf("%s为非合法符号串\n", str);

		printf("请输入一以#结束的符号串:");
		

	}

	return 0;
}

void E()
{
	if (flag)
	{
		if (str[i]=='e')
		{
			B();
			i++;
			A();
		}
		else
			flag = false;
	}
}

void A()
{
	if (flag)
	{
		if (str[i] == 'a')
			i++;
		else if (str[i] == 'b')
		{
			A();
			i++;
			B();
		}
		else
			flag = false;
	}
	
}

void B()
{
	if (flag)
	{
		if (str[i] == 'd')
		{
			E();
			i++;
		}
		else if (str[i] == 'a')
		{
			i++;
			i++;
		}
		else
			flag = false;
	}
	
}

void C()
{
	if (flag)
	{
		if (str[i] == 'e')
			i++;
		else if (str[i] == 'd')
			C();
		else
			flag = false;
	}
	
}


你可能感兴趣的:(程序)