📄 first.cpp
字号:
#include"bianyi.h"
void Rfirst(bool First[][36],const int Ruleright[][7],const int Link[][8])
{
SqStack Sqstack;
InitStack(Sqstack);
int Ltrace(0),Rtrace(0),Fitrace(0);
int Lptr(0),Rptr(0),Fiptr(1);
int flag;
while(Ltrace<=33)
{
////////////////////////
Rpush(Ltrace+128,0,Sqstack);
while(!Rempty(Sqstack))
{
Lptr=(Sqstack.top-1)->Lptr;
Rtrace=Link[Ltrace][Lptr];
while(Rtrace!=-1)//////这里也要保存liptr!!!
{/////////////////////////////////////////////////////////////////////
if(Ruleright[Rtrace][0]>=128)
{
Rpush(Ruleright[Rtrace][0],0,Sqstack);
Ltrace=Ruleright[Rtrace][0]-128;
Rtrace=Link[Ltrace][0];
Lptr=0;
}
else
{
if(Ruleright[Rtrace][0]>0)
{
Rpop(Ltrace,Lptr,Sqstack);
Ltrace-=128;
First[Ltrace][Ruleright[Rtrace][0]]=1;
Lptr++;
Rpush(Ltrace+128,Lptr,Sqstack);
Rtrace=Link[Ltrace][Lptr];
}
else
{
if(Ruleright[Rtrace][0]==0)
{
Rpop(Ltrace,Lptr,Sqstack);
Lptr++;
Rpush(Ltrace,Lptr,Sqstack);
Rtrace=Link[Ltrace-128][Lptr];
}
}
}
}
Rpop(Ltrace,Lptr,Sqstack);
Ltrace-=128;
if(!Rempty(Sqstack))
{
Rpop(Ltrace,Lptr,Sqstack);
Ltrace-=128;
Rtrace=Link[Ltrace][Lptr];
while(Fiptr<=35) ////////////////////////Fiptr 的初值
{
if(First[Ruleright[Rtrace][0]-128][Fiptr]==1)//////////////////////出现FIPTR
First[Ltrace][Fiptr]=1;
Fiptr++;
}
Lptr++;
Rpush(Ltrace+128,Lptr,Sqstack);
Fiptr=0;
}///(5)
}//(3)
Ltrace++;
}//(2)
Lptr=0;
Ltrace=0;
flag=0;
while(!flag)//////////////////////////////(6)
{
flag=1;
while(Ltrace<=33)
{ //////////////////////(7)
Rptr=0;
Lptr=0;
while(Link[Ltrace][Lptr]!=-1&&Link[Ltrace][Lptr]!=4)
{ //////////////////////////(8)
Rtrace=Link[Ltrace][Lptr];
Rptr=0;
while(Ruleright[Rtrace][Rptr]>=128)
{ ///////////////////////////////////////////////(9)
Rpush(Ltrace+128,Lptr,Sqstack);
Ltrace=Ruleright[Rtrace][Rptr]-128;
Lptr=0;
while(Link[Ltrace][Lptr]!=-1&&Link[Ltrace][Lptr]!=4)
Lptr++;
if(Link[Ltrace][Lptr]==4||First[Ltrace][0]==1)
{ //////////////////(10)
Rpop(Ltrace,Lptr,Sqstack);
Ltrace-=128;
Rptr++;
Fiptr=1;
Rtrace=Link[Ltrace][Lptr];
if(Ruleright[Rtrace][Rptr]>=128)
{ //////////////////////////////(11)
while(Fiptr<=35)
{
if(First[Ruleright[Rtrace][Rptr]-128][Fiptr]==1)
{
if(First[Ltrace][Fiptr]!=1)
{
First[Ltrace][Fiptr]=1;
flag=0;
}
}
Fiptr++;
}
}///////////////////(11)
else
{
if((Ruleright[Rtrace][Rptr]>0)&&(First[Ltrace][Ruleright[Rtrace][Rptr]]!=1))
{
First[Ltrace][Ruleright[Rtrace][Rptr]]=1;
flag=0;
}
if(Ruleright[Rtrace][Rptr]==0&&First[Ltrace][0]!=1)
{
flag=0;
First[Ltrace][0]=1;
}
}
}///////////////////////////////////////////(10)
else
{
Rpop(Ltrace,Lptr,Sqstack);
Ltrace-=128;
break;
}
}//////////////////////(9)
Lptr++;
}////////////////////////////////(8)
Rtrace=Link[Ltrace][Lptr];
if(Rtrace==4&&First[Ltrace][0]==0)
{
First[Ltrace][0]=1;
flag=0;
}
Ltrace++;
}////////////////(7)
}////////////////////////(6)
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -