📄 follow.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 + -