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

📄 follow.cpp

📁 编译原理课程实验要求做的语法分析
💻 CPP
字号:
#include"bianyi.h"
void RFollow(bool Follow[][36], const int Link[][8], const int Ruleright[][7], const bool First[][36])
{
	
	SqStack Sqstack;
	InitStack(Sqstack);

	Follow[0][35]=1;
	SElemType *Mid;
	int flag(0);

	int Fotrace(0),Ltrace(0),Rtrace(0),Fitrace(0);
	int Foptr(1),Lptr(0),Rptr(0),Fiptr(1);

	while(Rtrace<=51)
	{////////////////////////////////////////////////////////////////////////2
		while(Ruleright[Rtrace][Rptr]!=0)
		{///////////////////////////////////////////////////////////////////3
			if(Ruleright[Rtrace][Rptr]>=128)
			{/////////////////////////////////////////////////////////////////4
				if((Ruleright[Rtrace][Rptr+1]<128)&&(Ruleright[Rtrace][Rptr+1]!=0))
				{
					Follow[Ruleright[Rtrace][Rptr]-128][Ruleright[Rtrace][Rptr+1]]=1;
					while(!Rempty(Sqstack))
					{
						Rpop(Ltrace,Lptr,Sqstack);
						Follow[Ltrace-128][Ruleright[Rtrace][Rptr+1]]=1;
					}//while
				}//if

				
					if(Ruleright[Rtrace][Rptr+1]>=128)
					{//////////////////////////////////////////////////7
						while(Fiptr<=35)
						{/////////////////////////////////////////////////6
							if(First[Ruleright[Rtrace][Rptr+1]-128][Fiptr]==1)
							{
								Follow[Ruleright[Rtrace][Rptr]-128][Fiptr]=1;
								Rtrail(Sqstack,Fiptr,Follow);
							}//if
								Fiptr++;
							}//while//////////////////////////////////////////6
							Fiptr=1;

							if(First[Ruleright[Rtrace][Rptr+1]-128][0]==1)
							{
								if(Ruleright[Rtrace][Rptr+2]!=0)
									Rpush(Ruleright[Rtrace][Rptr],0,Sqstack);
								else
									Epop(Sqstack);
							}//if

							else
								Epop(Sqstack);
					}//////////////////////////////////////////////////////7
			}/////////////////////////////////////////////////4

				
				Rptr++;
		}///////////////////////////////////3
		

			Rtrace++;
			Rptr=0;
	}//////////////////////////////////////////2

		Rtrace=0;
		Rptr=0;
		Ltrace=0;

		while(Ltrace<=33)
		{////////////////////////////////////////////////////9
			while(Link[Ltrace][Lptr]!=-1)
			{///////////////////////////////////////////////10
				Rtrace=Link[Ltrace][Lptr];
				while(Ruleright[Rtrace][Rptr]!=0)
					Rptr++;

				while((Rptr!=0)&&(Ruleright[Rtrace][Rptr-1]>=128))
				{//////////////////////////////////////////////////////////////////////11
					Rpush(Ruleright[Rtrace][Rptr-1],Ltrace+128,Sqstack);
					////////////////////////////////////////////////////////
                    if(First[Ruleright[Rtrace][Rptr-1]-128][0]==1)
						Rptr--;
					
					else
						Rptr=0;
				}/////////////////////////////////////////////////////11

				Lptr++;
				Rptr=0;
			}////////////////////////////////////////////////////////////10

			Ltrace++;
			Lptr=0;
		}/////////////////////////////////////////////////////////////////10

		while(!flag)
		{
			flag=1;
			Mid=Sqstack.base;

			while(Mid!=Sqstack.top)
			{
				Foptr=1;
				while(Foptr<=35)
				{
					if((Follow[Mid->Lptr-128][Foptr]==1)&&(Follow[Mid->Ltrace-128][Foptr]!=1))
					{
						Follow[Mid->Ltrace-128][Foptr]=1;
						flag=0;
					}
					Foptr++;

				}
				Mid++;
			}
		}
		}




				

⌨️ 快捷键说明

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