📄 pl.h
字号:
#ifndef PL_H
#define PL_H
#include"include.h"
//#include"PL.h"
#include"down.h"
#include"anayword.h"
extern int sym;
extern int Vptr;
//extern int N;
//extern struct VT VTable[100];
extern P2;
#define L 100
#define S 101
#define LS 102
#define C 103
#define TP 104
#define Wd 105
#define W 106
#define F3 107
#define F2 108
#define F1 109
#define LE 110
#define EXP 111
#define PART 113
#define TT 114
#define I 115
#define IDD 116
#define ROP 117
#define E 118
#define ACTLEN 247
#define STATENUM 85
int SL[]={0,9,12,14,16,18,20,22,24,26,28,30,32,34,36,38,43,48,50,52,54,56,59,61,66,68,71,73,75,77,79,81,84,89,91,93,96,98,103,105,107,110,112,114,116,118,120,122,125,127,129,131,138,143,145,147,149,154,156,161,163,165,170,172,174,176,178,180,182,184,190,195,200,202,204,209,214,219,224,228,232,234,236,238,244,246};
int SA[ACTLEN][2]={ {3,6},{4,999},{5,15},{8,17},{10,20},{13,12},{14,13},{15,14},{16,7},{0,0},//0
{4,999},{32,4},{0,0},//1,9
{-1,1},{0,0},//2,12
{-1,-2},{0,0},//3,14
{-1,-3},{0,0},//4,16
{-1,-1},{0,0},//5,18
{-1,0},{0,0},//6,20
{22,23},{0,0},//7,22
{-1,0},{0,0},//8,24
{-1,0},{0,0},//9,26
{-1,0},{0,0},//10
{9,29},{0,0},//11
{16,31},{0,0},//12
{29,39},{0,0},//13
{29,46},{0,0},//14
{16,72},{17,73},{19,70},{29,71},{0,0},//15
{16,72},{17,73},{19,70},{29,71},{0,0},//16
{-1,-17},{0,0},//17
{12,56},{0,0},//18
{11,58},{0,0},//19
{16,60},{0,0},//20
{4,22},{32,4},{0,0},//21
{-1,-4},{0,0},//22
{16,72},{17,73},{19,70},{29,71},{0,0},//23
{-1,-5},{0,0},//24
{7,26},{-1,-6},{0,0},//25
{-1,-15},{0,0},//26
{-1,-7},{0,0},//27
{-1,-8},{0,0},//28
{-1,0},{0,0},//29
{-1,-9},{0,0},//30
{29,32},{-1,-11},{0,0},//31
{29,71},{19,70},{16,72},{17,73},{0,0},//32
{-1,-22},{0,0},//33
{-1,-23},{0,0},//34
{30,36},{31,37},{0,0},//35
{-1,-10},{0,0},//36
{29,71},{19,70},{16,72},{17,73},{0,0},//37
{-1,-21},{0,0},//38
{16,42},{0,0},//39
{30,43},{31,44},{0,0},//40
{-1,-25},{0,0},//41
{-1,-26},{0,0},//42
{-1,-12},{0,0},//43
{16,42},{0,0},//44
{-1,-24},{0,0},//45
{16,42},{0,0},//46
{30,48},{31,44},{0,0},//47
{-1,-13},{0,0},//48
{6,50},{0,0},//49
{-1,-14},{0,0},//50
{23,63},{24,64},{25,65},{26,66},{27,67},{28,68},{0,0},//51
{29,71},{19,70},{16,72},{17,73},{0,0},//52
{-1,-36},{0,0},//53
{9,55},{0,0},//54
{-1,-16},{0,0},//55
{29,71},{19,70},{16,72},{17,73},{0,0},//56
{-1,-18},{0,0},//57
{29,71},{19,70},{16,72},{17,73},{0,0},//58
{-1,-19},{0,0},//59
{22,61},{0,0},//60
{29,71},{19,70},{16,72},{17,73},{0,0},//61
{-1,-20},{0,0},//62
{-1,-37},{0,0},//63
{-1,-38},{0,0},//64
{-1,-39},{0,0},//65
{-1,-40},{0,0},//66
{-1,-41},{0,0},//67
{-1,-42},{0,0},//68
{19,75},{18,74},{20,76},{21,77},{-1,-27},{0,0},//69
{29,71},{19,70},{16,72},{17,73},{0,0},//70
{29,71},{19,70},{16,72},{17,73},{0,0},//71
{-1,-34},{0,0},//72
{-1,-35},{0,0},//73
{29,71},{19,70},{16,72},{17,73},{0,0},//74
{29,71},{19,70},{16,72},{17,73},{0,0},//75
{29,71},{19,70},{16,72},{17,73},{0,0},//76
{29,71},{19,70},{16,72},{17,73},{0,0},//77
{20,76},{21,77},{-1,-28},{0,0},//78
{20,76},{21,77},{-1,-29},{0,0},//79
{-1,-30},{0,0},//80
{-1,-31},{0,0},//81
{-1,-32},{0,0},//82
{30,84},{19,75},{18,74},{20,76},{21,77},{0,0},//83
{-1,-33},{0,0}//84
};
int GL[][2]={{0,1},{6,21},//L,0
{0,3},{2,5},{6,3},{8,25},{9,27},{10,28},//S,2
{0,2},{6,2},//LS,8
{0,8},{2,8},{6,8},{8,8},{9,8},{10,8},{29,8},//C,10
{0,9},{2,9},{6,9},{8,9},{9,9},{10,9},{29,9},//TP,17
{0,10},{2,10},{6,10},{8,10},{9,10},{10,10},{29,10},//Wd,24
{0,16},{2,16},{6,16},{8,16},{9,16},{10,16},{29,16},//W,31
{0,11},{2,11},{6,11},{8,11},{9,11},{10,11},{29,11},//F3,38
{0,18},{2,18},{6,18},{8,18},{9,18},{10,18},{29,18},//F2,45
{0,19},{2,19},{6,19},{8,19},{9,19},{10,19},{29,19},//F1,52
{15,49},{16,54},//LE,59
{15,51},{16,51},{23,24},{32,34},{37,34},{52,53},//EXP,61
{15,69},{16,69},{23,69},{32,69},{37,69},{52,69},{56,69},{58,69},//E,67
{61,69},{70,82},{71,83},{74,78},{75,79},{76,80},{77,81},//E,75
{32,35},//PART,82
{32,33},{37,38},//TT,83
{39,40},{46,47},//I,85
{39,41},{43,45},{46,41},//ID,87
{51,52},{56,57},{58,59},{61,62}//ROP,90
};
int NL[][2]={{0,1},
{0,2},//1
{0,1},//2
{8,2},//3
{2,3},//4
{2,3},//5
{2,2},//6
{2,2},//7
{2,2},//8
{2,3},//9
{2,5},//10
{2,2},//11
{2,4},//12
{2,4},//13
{10,3},//14
{17,3},//15
{24,3},//16
{31,1},//17
{38,3},//18
{45,3},//19
{52,4},//20
{82,3},//21
{82,1},//22
{83,1},//23
{85,3},//24
{85,1},//25
{87,1},//26
{61,1},//27
{67,3},//28
{67,3},//29
{67,3},//30
{67,3},//31
{67,2},//32
{67,3},//33
{67,1},//34
{67,1},//35
{59,3},//36
{90,1},//37
{90,2},//38
{90,1},//39
{90,2},//40
{90,1},//41
{90,2}//42
};
int hash[43]={0 ,L ,L ,LS,S ,S ,S ,S ,S ,S ,
S ,S ,S ,S ,C ,TP,Wd,W ,F3,F2,
F1,PART,PART,TT,I,I,IDD,EXP,E,E,
E ,E ,E ,E ,E ,E ,LE,ROP,ROP,ROP,ROP,ROP,ROP};
#define SLEN 100
struct arg
{
int value;
int pos;
};
int PStack[SLEN];
struct {
char value[10];
int pos;
}stack[SLEN],TE;
int sp=0;
int s2=0;
void push(int state,int no)
{
PStack[sp]=state;
// WStack[sp]=no;
sp++;
}
void pop(int &state,int &no)
{
state=PStack[sp];
sp--;
}
int action(int state,int no)
{
int i;
if(state==0)i=SL[state];
else
i=SL[state]+1;
for(;SA[i][0]!=-1&&SA[i][0]!=no&&SA[i][0]!=0;)
i++;
if(SA[i][0]==no||SA[i][0]==-1)
return SA[i][1];
return -999;
}
int GetGL(int state,int no)
{
int i=NL[no][0];
for(;GL[i][0]!=state;i++);
return GL[i][1];
}
int newt=0;
int newtp()
{
newt++;
return newt;
}
struct fourexp{
char op[10];
int a;
int b;
int c;
}fexp[100]; //四元式的结构定义
void gen(char op[],int x,int y,int k)
{
strcpy(fexp[PC].op,op);
fexp[PC].a=x;
fexp[PC].b=y;
fexp[PC].c=k;
PC++;
}
void PASER()
{
int state=0;
push(state,sym);
sym=GetWord();
do{
state=action(state,sym);
if(state==999)return;
if(state==-999)
{error(IDERR);return;}
if(state>0)
{//int dd=1;
if(sym==CONST){
strcpy(TE.value,table[P2].name);
TE.pos=-1;//findv();//dd++;
}else if(sym==IDENT){
strcpy(TE.value,table[P2].name);
TE.pos=findv(table[P2].name);
}else
{ strcpy(TE.value,table[P2].name);
TE.pos=-2;//dd++;
}
strcpy(stack[sp].value,TE.value);
stack[sp].pos=TE.pos;
push(state,sym);
sym=GetWord();
}
if(state<0)
{
state=state*(-1);
switch(state)
{
case 28:
int d=newtp();
gen("+",stack[sp-1].pos,stack[sp-3].pos,d);
gen(":=",d,0,stack[sp-5].pos);
break;
}
int dn=NL[state][1];
sp=sp-dn;
state=GetGL(PStack[sp-1],state);
push(state, hash[state]);
}
}while(1);
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -