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

📄 wfyb.cpp

📁 编译原理课程实验要求做的语法分析
💻 CPP
字号:
#include<iostream.h>
#include<ctype.h>
#include<stdio.h>
void youbu(int Ruleright[][7],int Link[][8])
{
	
	bool First[34][36]={0};
	bool Follow[34][36]={0};

	int Rtrace,Rptr;
	int Ltrace,Lptr;

	Rtrace=Rptr=0;
	Ltrace=Lptr=0;
	char s;
	

    FILE *fp;
	if((fp=fopen("e:\\wenfa.txt","r"))==NULL)
	{
		cout<<"error!";
		return ;
	}

	s=fgetc(fp);
	
	
	while(s!=EOF)
	{
	
		if(s=='<')
		{
			s=fgetc(fp);
			while(s!='>')
			{
			
				Ltrace*=10;
				Ltrace+=s-48;
			    
			    s=fgetc(fp);
			
			}
	        Ltrace-=128;
			if(Ltrace==12||Ltrace==29)
			{
				if(Ltrace==12)
				{
					Link[Ltrace][0]=12;
				    Link[Ltrace][1]=4;
				    Link[Ltrace][2]=-1;
		            Lptr=0;
		            Ltrace=0;
		            while(s!='\n')
						s=fgetc(fp);
					s=fgetc(fp);
	        	    Rptr=0;
	        	    if(Rtrace==4)
						Rtrace++;
					continue;
				}
				if(Ltrace==29)
				{
					Link[Ltrace][0]=39;
					Link[Ltrace][1]=40;
					Link[Ltrace][2]=22;
					Link[Ltrace][3]=-1;
					Lptr=0;
					Ltrace=0;
					while(s!='\n')
						s=fgetc(fp);
					s=fgetc(fp);
					Ruleright[Rtrace][0]=2;
					
					Ruleright[Rtrace++][1]=0;
					Ruleright[Rtrace][0]=1;
					
					Ruleright[Rtrace++][1]=0;
					
					Rptr=0;
					if(Rtrace==4)
						Rtrace++;
					continue;
				}
			}

		else
			Link[Ltrace][Lptr]=Rtrace;
		    
		}

		while(s!='\n')
		{
			if(!isalpha(s))
			{
				while(s!='<'&&s!='"'&&s!='|')
				s=fgetc(fp);
		
				if(s=='<'||s=='"')
				{
					s=fgetc(fp);
				    while(s!='>'&&s!='"')
					{
						Ruleright[Rtrace][Rptr]*=10;
					    Ruleright[Rtrace][Rptr]+=s-48;
						s=fgetc(fp);
					}//while
				
					Rptr++;
				    s=fgetc(fp);
				}//if
				else
				{
					if(s=='|')
					{
				        Lptr++;
						
				        Rptr=0;
						Rtrace++;
				        if(Rtrace==4)
							Rtrace++;
						Link[Ltrace][Lptr]=Rtrace;
						
				        s=fgetc(fp);
					}//if
					
				}//else
			}//if
			
		
		if(isalpha(s))
		{
			while(s!='\n'&&s!='|')
				s=fgetc(fp);
			if(Rtrace!=4)
				Rtrace--;
			Link[Ltrace][Lptr]=4;
		
			
		}

		
		}
		Lptr++;
		Link[Ltrace][Lptr]=-1;
		Lptr=0;
		Ltrace=0;
		s=fgetc(fp);
		Rtrace++;
		 Rptr=0;
		if(Rtrace==4)
			Rtrace++;
	

	}


	
	fclose(fp);
	return ;
}

⌨️ 快捷键说明

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