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

📄 analyse.txt

📁 递归下降分析法 (1)E->TG (2)G->+TG|—TG (3)G->ε (4)T->FS (5)S->*FS|/FS (6)S->ε (7)F-
💻 TXT
字号:

(1)E->TG
(2)G->+TG|—TG
(3)G->ε
(4)T->FS
(5)S->*FS|/FS
(6)S->ε
(7)F->(E)
(8)F->i

void main()                      
{ 
	FILE *in;
	if((in=fopen("input.txt","r+"))==NULL)
	{
		printf("\ncannot open the file \n");
		exit(0);
	}
	a[0]=ch=fgetc(in);
	int i=1;
	while(ch!=EOF)
	{
		a[i]=ch=fgetc(in);
        i++;
	}
	fclose(in);
	ch=a[0];
	d[0]='E';
    d[1]='=';
    d[2]='>';
    d[3]='T';
    d[4]='G';
    d[5]='#'; 
    int f;
	f=E0();
	if (f==0) return;
	if (ch=='#')
	{
       printf("\n\n%s",a);
	   printf("legal input valve\n");
       i=0;
	   char	x=d[i];
	   printf("\nstring of process:\n");
	   while(x!='#') 
	   {
			printf("%c",x);
			i++;
			x=d[i];        
		}
	}
	else 
	{
		printf("%s illicit string:\n",a);
		return; 

}

int E0()
{   
	int f,t;
	printf("(1)E->TG\n");
	f=T();
	if (f==0) return 0;
	t=G();
	if (t==0) return 0;
	else return 1;
}

int E()
{   int f,t;
    printf("(1)E->TG\n");
    e[0]='E';e[1]='=';e[2]='>';e[3]='T';e[4]='G';e[5]='#';
	tuidao();
	f=T();
	if (f==0) return 0;
	t=G();
	if (t==0) return 0;
	else return 1;
}

int T()
{   int f,t;
        printf("(4)T->FS\n");
    e[0]='T';e[1]='=';e[2]='>';e[3]='F';e[4]='S';e[5]='#';
	tuidao();
   	f=F();
	if (f==0) return 0;
	t=S(); 
	if (t==0) return 0;
		else return 1;
}

int  G()
{   int f,t;
	if(ch=='+') 
	{   
		printf("(2)G->+TG\n");
		e[0]='G';e[1]='=';e[2]='>';e[3]='+';e[4]='T';e[5]='G';e[6]='#';
		tuidao();
		ch=a[++ip];
		f=T();
		if (f==0) return 0;
		t=G();
		if (f==0) return 0;
		else return 1;
	}
     if(ch=='-') 
	 {  
		 	printf("(2)G->-TG\n");
		e[0]='G';e[1]='=';e[2]='>';e[3]='+';e[4]='T';e[5]='G';e[6]='#';
		tuidao();
		ch=a[++ip];
		f=T();
		if (f==0) return 0;
		t=G();
		if (f==0) return 0;
		else return 1;
	}
	 printf("(3)G->ε\n");
	 e[0]='G';e[1]='=';e[2]='>';e[3]=' ';e[4]='#';
	 tuidao();
	return 1;
}

int S()
{
	int f,t;
	if(ch=='*') 
	{   
        printf("(5)S->*FS\n");
		e[0]='S';e[1]='=';e[2]='>';e[3]='*';e[4]='F';e[5]='S';e[6]='#';
		tuidao();
		ch=a[++ip];
		f=F();
		if (f==0) return 0;
		t=S();
		if (t==0) return 0;
		else return 1;
	}
    if(ch=='/') 
	{   
		printf("(5)S->/FS\n");
		e[0]='S';e[1]='=';e[2]='>';e[3]='/';e[4]='F';e[5]='S';e[6]='#';
		ch=a[++ip];
		f=F();
		if (f==0) return 0;
		t=S();
		if (t==0) return 0;
		else return 1;
	}
	printf("(6)S->ε\n");
	e[0]='S';e[1]='=';e[2]='>';e[3]=' ';e[4]='#';
	 tuidao();
	return 1;
}

int F()
{   
	int f;
	if(ch=='(') 
	{   
        printf("(7)F->(E)\n");
		e[0]='F';e[1]='=';e[2]='>';e[3]='(';e[4]='E';e[5]=')';e[6]='#';
		tuidao();
		ch=a[++ip];
		f=E();
		if (f==0) return 0;
		if(ch==')') 
			ch=a[++ip];
		else 
		{
			 printf("error\n");
			 return 0;
		 }
	}
	else if(ch=='i') 
	{      
		printf("(8)F->i\n");
		  e[0]='F';e[1]='=';e[2]='>';e[3]='i';e[4]='#';
		  tuidao();
		   ch=a[++ip]; 
	}
	else 
	{
		printf("error\n");
		return 0;
	}
	return 1;
}

void tuidao()
{                           
	int m,k,j,q;
    int i=0;
	m=0;k=0;q=0;
    i=n;
	d[n]='=';d[n+1]='>';d[n+2]='#';n=n+2;i=n;
	i=i-2;
	while(d[i]!='>'&&i!=0) i=i-1;
	i=i+1;
	while(d[i]!=e[0]) i=i+1;
	q=i;
	m=q;k=q;
	while(d[m]!='>')  m=m-1;
	m=m+1;
	while(m!=q)
	{
		d[n]=d[m];m=m+1;n=n+1;
	}
	d[n]='#';
    for(j=3;e[j]!='#';j++)
	{
		d[n]=e[j];
		n=n+1;
	}
	k=k+1;
	while(d[k]!='=') 
	{
		d[n]=d[k];n=n+1;k=k+1;
	}
	d[n]='#';
	
}

⌨️ 快捷键说明

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