⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 试验3.txt

📁 【实验名称】LL(1)分析总控程序的设计与实现 【实验目的和要求】 设计、编制
💻 TXT
字号:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dos.h>

char A[20];
char B[20];
char v1[20] = {'i','+','*','(',')','#'};
char v2[20] = {'E','G','T','S','F'};

int j = 0,b = 0,top = 0,l;

typedef struct type
{
	char origin;
	char array[5];
	int length;
}type;

type e,t,g,g1,s,s1,f,f1;
type C[10][10];

void print()
{
	int a;
	for(a = 0;a<=top+1;a++)
	{
		printf("%c",A[a]);
	}
	printf("\t\t");
}

void print1()
{
	int j;
	for(j=0;j<b;j++)
		printf(" ");
	for(j = b;j<=l;j++)
		printf("%c",B[j]);
	printf("\t\t");
}

void main()
{
	int m,n,k = 0,flag = 0,finish = 0;
	char ch;
	char x;
	type cha;
	e.origin = 'E';
	strcpy(e.array,"TG");
	e.length = 2;
	t.origin = 'T';
	strcpy(t.array,"FS");
	t.length = 2;
	g.origin = 'G';
	strcpy(g.array,"+TG");
	g.length = 3;
	g1.origin = 'G';
	g1.array[0] = '^';
	g1.length = 1;
	s.origin = 'S';
	strcpy(s.array,"*FS");
	s.length = 3;
	s1.origin = 'S';
	s1.array[0] = '^';
	s1.length = 1;
	f.origin = 'F';
	strcpy(f.array,"(E)");
	f.length = 3;
	f1.origin = 'F';
	f1.array[0] = 'i';
	f1.length = 1;
	for(m = 0;m<=4;m++)
		for(n = 0;n <= 5;n++)
		{
			C[m][n].origin = 'N';
		}
	C[0][0] = e;
	C[0][3] = e;
	C[1][1] = g;
	C[1][4] = g1;
	C[1][5] = g1;
	C[2][0] = t;
	C[2][3] = t;
	C[3][1] = s1;
	C[3][2] = s;
	C[3][4] = C[3][5] = s1;
	C[4][0] = f1;
	C[4][3] = f;
	printf("提示:本程序只对由i,+,*,(,)构成的以#为结束的字符串进行分析,\n");
	printf("请输入要分析的字符串:");
	do
	{
		scanf("%c",&ch);
		if((ch!='i') && (ch!='+') && (ch!='*') && (ch!='(') && (ch!=')') && (ch!='#'))
		{
			printf("输入中有违禁字符!\n");
			exit(1);
		}
		B[j] = ch;
		j++;

	}while(ch!='#');
	l = j;
	ch = B[0];
	A[top] = '#';
	A[++top] = 'E';
	printf("步骤\t\t分析栈 \t\t剩余字符 \t\t所用产生式\n");
	do
	{
		x = A[top--];
		printf("%d",k++);
		printf("\t\t");
		for(j = 0;j<=5;j++)
			if(x==v1[j])
			{
				flag = 1;
				break;
			}
			if(flag==1)
			{
				if(x=='#')
				{
					finish = 1;
					printf("acc!\n");
					getchar();
					getchar();
					exit(1);
				}
				if(x==ch)
				{
					print();
					print1();
					printf("%c匹配\n",ch);
					ch = B[++b];
					flag = 0;
				}
				else
				{
					print();
					print1();
					printf("%c出错\n",ch);
					exit(1);
				}
			}
			else
			{
				for(j = 0;j<=4;j++)
				{
					if(x==v2[j])
					{
						m = j;
						break;
					}
					for(j = 0;j<=5;j++)
						if(ch==v2[j])
						{
							n = j;
							break;
						}
						cha = C[m][n];
						if(cha.origin!='N')
						{
							print();
							print1();
							printf("%c->",cha.origin);
							for(j = 0;j<cha.length;j++)
								printf("%c",cha.array[j]);
							printf("\n");
							for(j = (cha.length-1);j>=0;j--)
								A[++top] = cha.array[j];
							if(A[top]=='^')
								top--;
						}
						else
						{
							print();
							print1();
							printf("%c出错\n",x);
							exit(1);
						}
				}
			}
	}while(finish == 0);

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -