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

📄 ll1语法分析a.txt

📁 这是编译原理的源代码
💻 TXT
📖 第 1 页 / 共 3 页
字号:
  free(p);
  if (StackTop==NULL)
	  STACKEMPTY=true;
}

/*读栈顶标志,看是终极符还是非终极符*/
int CparseLL1::readStackflag()
{ int j;
  j=StackTop->flag ;
  return(j);
}

/*非终极符时*/
Cglobal::NontmlType CparseLL1::readstackN()
{
  return ((*StackTop).var.Ntmlvar);
}

/*终极符*/
Cglobal::TmlType CparseLL1::readstackT()
{
  return ((*StackTop).var.tmlvar);
}


/*压栈的实现过程,压入的是指向树节点的指针的地址*/
void  CparseLL1::PushPA(TreeNode **t)
{
	StackNodePA *p=NULL;
    p=(StackNodePA *)malloc (sizeof(StackNodePA));
	p->pointer= t ;
	p->underNode =StackTopPA;
    StackTopPA=p;
    paSTACKEMPTY=false;
}
/*弹栈的实现过程*/
Cglobal::TreeNode ** CparseLL1::PopPA()
{     
  StackNodePA  *p=NULL;
  TreeNode   **backpointer;
  p = StackTopPA;
  backpointer=p ->pointer;
  StackTopPA=StackTopPA->underNode;
  free(p);
  if (StackTopPA==NULL)
	  paSTACKEMPTY=true;

  return backpointer;
}


/*操作符栈的压栈实现过程,压入的是指向树节点的指针*/
void  CparseLL1::PushOp(TreeNode *t)
{
	StackNodeP *p=NULL;
    p=(StackNodeP *)malloc (sizeof(StackNodeP));
	p->pointer= t ;
	p->underNode =OpStackTop;
    OpStackTop=p;
	OpSTACKEMPTY=FALSE;
}

/*操作符栈的弹栈实现过程*/
Cglobal::TreeNode * CparseLL1::PopOp()
{     
  StackNodeP *p=NULL;
  TreeNode   *backpointer;
  p=OpStackTop;
  backpointer=p->pointer;
  OpStackTop=OpStackTop->underNode;
  free(p);
  if (OpStackTop==NULL)
	  OpSTACKEMPTY= TRUE;

  return backpointer;
}

LexType CparseLL1::ReadOpStack()
{
	TreeNode *t1;
	t1=OpStackTop->pointer;
    return (t1->attr.ExpAttr.op);
}
/*操作数栈的压栈实现过程,压入的是指向树节点的指针*/
void  CparseLL1::PushNum(TreeNode *t)
{
	StackNodeP *p=NULL;
    p =(StackNodeP *)malloc (sizeof(StackNodeP));
	p->pointer= t ;
	p->underNode =NumStackTop;
    NumStackTop=p;
	NumSTACKEMPTY=false;
}
/*操作数栈的弹栈实现过程*/
Cglobal::TreeNode * CparseLL1::PopNum()
{     
  StackNodeP  *p=NULL;
  TreeNode    *backpointer;
  p =NumStackTop;
  backpointer=p->pointer;
  NumStackTop=NumStackTop->underNode;
  free(p);
  if (NumStackTop==NULL)
	  NumSTACKEMPTY=true;

  return backpointer;
}
 


/************<语法分析功能函数> **************/

/********************************************************/
/* 函数名  CreatLL1Table								*/
/* 功  能  创建LL1分析表								*/
/* 说  明  初始数组(表)中的每一项都为0;根据LL1文法   */
/*         给数组赋值(填表);填好后,若值为0,		*/
/*         表示无产生式可选,其他,为选中的产生式  		*/
/********************************************************/

void CparseLL1::CreatLL1Table()
{ int i,j;
  
  /*初始化LL1表元素*/  
  for (i=0;i<TABLESIZE;i++)
	  for (j=0;j<TABLESIZE;j++)
	     LL1Table[i][j]=0;

  LL1Table	[Program][PROGRAM]  =			1;

  LL1Table	[ProgramHead][PROGRAM]  =		2;

  LL1Table	[ProgramName][ID]	   =		3;
  
  LL1Table	[DeclarePart][TYPE]=			4;
  LL1Table	[DeclarePart][VAR]=				4;
  LL1Table	[DeclarePart][PROCEDURE]=		4;
  LL1Table	[DeclarePart][BEGIN]=			4;
  
  LL1Table	[TypeDec][VAR]=					5;
  LL1Table	[TypeDec][PROCEDURE]=			5;
  LL1Table	[TypeDec][BEGIN]=				5;
  
  LL1Table	[TypeDec][TYPE]=				6;
  
  LL1Table	[TypeDeclaration][TYPE]=		7;
  
  LL1Table	[TypeDecList][ID]=				8;
  
  LL1Table	[TypeDecMore][VAR]=				9;
  LL1Table	[TypeDecMore][PROCEDURE]=		9;
  LL1Table	[TypeDecMore][BEGIN]=			9;

  
  LL1Table	[TypeDecMore][ID]=				10;
  
  LL1Table	[TypeId][ID]=					11;
  
  LL1Table	[TypeName][INTEGER]=			12;
  LL1Table	[TypeName][CHAR1]=				12;
  
  LL1Table	[TypeName][ARRAY]=				13;
  LL1Table	[TypeName][RECORD]=				13;
  
  LL1Table	[TypeName][ID]=					14;
  
  LL1Table	[BaseType][INTEGER]=			15;
  
  LL1Table	[BaseType][CHAR1]=				16;
  
  LL1Table	[StructureType][ARRAY]=			17;
  
  LL1Table	[StructureType][RECORD]=		18;
  
  LL1Table	[ArrayType][ARRAY]=				19;
  
  LL1Table	[Low][INTC]=					20;

  LL1Table	[Top][INTC]=					21;

  LL1Table	[RecType][RECORD]=				22;
  
  LL1Table	[FieldDecList][INTEGER]=		23;
  LL1Table	[FieldDecList][CHAR1]=			23;
  
  LL1Table	[FieldDecList][ARRAY]=			24;
  
  LL1Table	[FieldDecMore][END]=			25;
  
  LL1Table	[FieldDecMore][INTEGER]=		26;
  LL1Table	[FieldDecMore][CHAR1]=			26;
  LL1Table	[FieldDecMore][ARRAY]=			26;
  
  LL1Table	[IdList][ID]=					27;
  
  LL1Table	[IdMore][SEMI]=					28;
  
  LL1Table	[IdMore][COMMA]=				29;
  
  LL1Table	[VarDec][PROCEDURE]=			30;
  LL1Table	[VarDec][BEGIN]=				30;
  
  LL1Table	[VarDec][VAR]=					31;
  
  LL1Table	[VarDeclaration][VAR]=			32;
  
  LL1Table	[VarDecList][INTEGER]=			33;
  LL1Table	[VarDecList][CHAR1]=			33;
  LL1Table	[VarDecList][ARRAY]=			33;
  LL1Table	[VarDecList][RECORD]=			33;
  LL1Table	[VarDecList][ID]=				33;
  
  LL1Table	[VarDecMore][PROCEDURE]=		34;
  LL1Table	[VarDecMore][BEGIN]=			34;

  
  LL1Table	[VarDecMore][INTEGER]=			35;
  LL1Table	[VarDecMore][CHAR1]=				35;
  LL1Table	[VarDecMore][ARRAY]=			35;
  LL1Table	[VarDecMore][RECORD]=			35;
  LL1Table	[VarDecMore][ID]=				35; 
  
  LL1Table	[VarIdList][ID]=				36;
  
  LL1Table	[VarIdMore][SEMI]=				37;
  
  LL1Table	[VarIdMore][COMMA]=				38;
  
  LL1Table	[ProcDec][BEGIN]=				39;
  
  LL1Table	[ProcDec][PROCEDURE]=			40;
  
  LL1Table	[ProcDeclaration][PROCEDURE]=	41;

  LL1Table  [ProcDecMore][BEGIN]=			42;

  LL1Table  [ProcDecMore][PROCEDURE]=		43;
  
  LL1Table	[ProcName][ID]=					44;
  
  LL1Table	[ParamList][RPAREN]=			45;
  
  LL1Table	[ParamList][INTEGER]=			46;
  LL1Table	[ParamList][CHAR1]=				46;
  LL1Table	[ParamList][ARRAY]=				46;
  LL1Table	[ParamList][RECORD]=			46;
  LL1Table	[ParamList][ID]=				46;
  LL1Table	[ParamList][VAR]=				46;
  
  LL1Table	[ParamDecList][INTEGER]=		47;
  LL1Table	[ParamDecList][CHAR1]=			47;
  LL1Table	[ParamDecList][ARRAY]=			47;
  LL1Table	[ParamDecList][RECORD]=			47;
  LL1Table	[ParamDecList][ID]=				47;
  LL1Table	[ParamDecList][VAR]=			47;

  LL1Table	[ParamMore][RPAREN]=			48;

  LL1Table	[ParamMore][SEMI]=				49;
 
  LL1Table	[Param][INTEGER]=				50;
  LL1Table	[Param][CHAR1]=					50;
  LL1Table	[Param][ARRAY]=					50;
  LL1Table	[Param][RECORD]=				50;
  LL1Table	[Param][ID]=					50;
  
  LL1Table	[Param][VAR]=					51;
  
  LL1Table	[FormList][ID]=					52;
  
  LL1Table	[FidMore][SEMI]=				53;
  LL1Table	[FidMore][RPAREN]=				53;

  LL1Table	[FidMore][COMMA]=				54;
  
  LL1Table	[ProcDecPart][TYPE]=			55;
  LL1Table	[ProcDecPart][VAR]=				55;
  LL1Table	[ProcDecPart][PROCEDURE]=		55;
  LL1Table	[ProcDecPart][BEGIN]=			55;
  
  LL1Table	[ProcBody][BEGIN]=				56;
  
  LL1Table	[ProgramBody][BEGIN]=			57;
  
  LL1Table	[StmList][ID]=					58;
  LL1Table	[StmList][IF]=					58;
  LL1Table	[StmList][WHILE]=				58;
  LL1Table	[StmList][RETURN]=				58;
  LL1Table	[StmList][READ]=				58;
  LL1Table	[StmList][WRITE]=				58;

  LL1Table	[StmMore][END]=					59;
  LL1Table	[StmMore][ENDWH]=				59;
  LL1Table  [StmMore][ELSE]=				59;
  LL1Table  [StmMore][FI]=					59;

  LL1Table	[StmMore][SEMI]=				60;

  LL1Table	[Stm][IF]=						61;
  
  LL1Table	[Stm][WHILE]=					62;
  
  LL1Table	[Stm][READ]=					63;
  
  LL1Table	[Stm][WRITE]=					64;
  
  LL1Table	[Stm][RETURN]=					65;
  
  LL1Table	[Stm][ID]=						66;
  
  LL1Table	[AssCall][ASSIGN]=				67;
  LL1Table	[AssCall][LMIDPAREN]=			67;
  LL1Table	[AssCall][DOT]= 				67;

  
  LL1Table	[AssCall][LPAREN]=				68;
  
  LL1Table	[AssignmentRest][ASSIGN]=		69;
  LL1Table  [AssignmentRest][LMIDPAREN]=    69;
  LL1Table  [AssignmentRest][DOT]=          69;
  
  LL1Table	[ConditionalStm][IF]=			70;
  

  LL1Table	[LoopStm][WHILE]=				71;
  
  LL1Table	[InputStm][READ]=				72;

  LL1Table	[InVar][ID]=					73;

  LL1Table	[OutputStm][WRITE]=				74;
  
  LL1Table	[ReturnStm][RETURN]=			75;
  
  LL1Table	[CallStmRest][LPAREN]=			76;
  
  LL1Table	[ActParamList][RPAREN]=			77;
  
  LL1Table	[ActParamList][ID]=				78;
  LL1Table	[ActParamList][INTC]=			78;
  LL1Table  [ActParamList][LPAREN]=         78;
  
  LL1Table	[ActParamMore][RPAREN]=			79;
  
  LL1Table	[ActParamMore][COMMA]=			80;
  
  LL1Table	[RelExp][LPAREN]=				81;
  LL1Table	[RelExp][INTC]=					81;
  LL1Table	[RelExp][ID]=					81;
  
  LL1Table	[OtherRelE][LT]=				82;
  LL1Table	[OtherRelE][EQ]=				82;

  LL1Table	[Exp][LPAREN]=					83;
  LL1Table	[Exp][INTC]=					83;
  LL1Table	[Exp][ID]=						83;

  LL1Table	[OtherTerm][LT]=				84;
  LL1Table	[OtherTerm][EQ]=				84;
  LL1Table	[OtherTerm][THEN]=				84;
  LL1Table	[OtherTerm][DO]=				84;
  LL1Table	[OtherTerm][RPAREN]=			84;
  LL1Table	[OtherTerm][END]=				84;
  LL1Table	[OtherTerm][SEMI]=				84;
  LL1Table	[OtherTerm][COMMA]=				84;
  LL1Table	[OtherTerm][ENDWH]=				84;
  LL1Table	[OtherTerm][ELSE]=				84;
  LL1Table	[OtherTerm][FI]=				84;
  LL1Table  [OtherTerm][RMIDPAREN]=			84;
  
  
  LL1Table	[OtherTerm][PLUS]=				85;
  LL1Table	[OtherTerm][MINUS]=				85;

  LL1Table	[Term][LPAREN]=					86;
  LL1Table	[Term][INTC]=					86;
  LL1Table	[Term][ID]=						86;

  LL1Table	[OtherFactor][PLUS]=			87;
  LL1Table	[OtherFactor][MINUS]=			87;
  LL1Table	[OtherFactor][LT]=				87;
  LL1Table	[OtherFactor][EQ]=				87;
  LL1Table	[OtherFactor][THEN]=			87;
  LL1Table	[OtherFactor][ELSE]=			87;
  LL1Table	[OtherFactor][FI]=				87;
  LL1Table	[OtherFactor][DO]=				87;
  LL1Table	[OtherFactor][ENDWH]=			87;
  LL1Table	[OtherFactor][RPAREN]=			87;
  LL1Table	[OtherFactor][END]=				87;
  LL1Table	[OtherFactor][SEMI]=			87;
  LL1Table	[OtherFactor][COMMA]=			87;
  LL1Table  [OtherFactor][RMIDPAREN]=		87;

  LL1Table	[OtherFactor][TIMES]=			88;
  LL1Table	[OtherFactor][OVER]=			88;

  LL1Table	[Factor][LPAREN]=				89;

  LL1Table	[Factor][INTC]=					90;
  
  LL1Table	[Factor][ID]=					91;
  
  LL1Table  [Variable][ID]=					92;

  LL1Table  [VariMore][ASSIGN]=				93;
  LL1Table  [VariMore][TIMES]=				93;
  LL1Table  [VariMore][OVER]=				93;
  LL1Table  [VariMore][PLUS]=				93;
  LL1Table  [VariMore][MINUS]=				93;
  LL1Table  [VariMore][LT]=				    93;
  LL1Table  [VariMore][EQ]=					93;
  LL1Table  [VariMore][THEN]=				93;
  LL1Table  [VariMore][ELSE]=				93;
  LL1Table  [VariMore][FI]=					93;
  LL1Table  [VariMore][DO]=					93;
  LL1Table  [VariMore][ENDWH]=				93;
  LL1Table  [VariMore][RPAREN]=				93;
  LL1Table  [VariMore][END]=				93;
  LL1Table  [VariMore][SEMI]=				93;
  LL1Table  [VariMore][COMMA]=				93;
  LL1Table  [VariMore][RMIDPAREN]=			93;

  LL1Table  [VariMore][LMIDPAREN]=			94;
  
  LL1Table  [VariMore][DOT]=				95;

  LL1Table  [FieldVar][ID]=                 96;

  LL1Table  [FieldVarMore][ASSIGN]=			97;
  LL1Table  [FieldVarMore][TIMES]=          97;
  LL1Table  [FieldVarMore][OVER]=			97;
  LL1Table  [FieldVarMore][PLUS]=           97;
  LL1Table  [FieldVarMore][MINUS]=          97;
  LL1Table  [FieldVarMore][LT]=				97;
  LL1Table  [FieldVarMore][EQ]=				97;
  LL1Table  [FieldVarMore][THEN]=			97;
  LL1Table  [FieldVarMore][ELSE]=			97;
  LL1Table  [FieldVarMore][FI]=				97;
  LL1Table  [FieldVarMore][DO]=				97;
  LL1Table  [FieldVarMore][ENDWH]=          97;
  LL1Table  [FieldVarMore][RPAREN]=         97;
  LL1Table  [FieldVarMore][END]=			97;
  LL1Table  [FieldVarMore][SEMI]=			97;
  LL1Table  [FieldVarMore][COMMA]=          97;

  LL1Table  [FieldVarMore][LMIDPAREN]=      98;

  LL1Table	[CmpOp][LT]=					99;
  
  LL1Table	[CmpOp][EQ]=					100;
  
  LL1Table	[AddOp][PLUS]=					101;
  
  LL1Table	[AddOp][MINUS]=					102;
  
  LL1Table	[MultOp][TIMES]=				103;
  
  LL1Table	[MultOp][OVER]=					104;

}

⌨️ 快捷键说明

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