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

📄 pl.h

📁 编译原理课程设计 很珍贵的资源 快来下载吧
💻 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 + -