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

📄 parseb.java

📁 编译原理实验
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
	  LL1Table	[NontmlType.ParamDecList.ordinal()][LexType.INTEGER.ordinal()]=		47;
	  LL1Table	[NontmlType.ParamDecList.ordinal()][LexType.CHAR.ordinal()]=			47;
	  LL1Table	[NontmlType.ParamDecList.ordinal()][LexType.ARRAY.ordinal()]=			47;
	  LL1Table	[NontmlType.ParamDecList.ordinal()][LexType.RECORD.ordinal()]=			47;
	  LL1Table	[NontmlType.ParamDecList.ordinal()][LexType.ID.ordinal()]=				47;
	  LL1Table	[NontmlType.ParamDecList.ordinal()][LexType.VAR.ordinal()]=			47;

	  LL1Table	[NontmlType.ParamMore.ordinal()][LexType.RPAREN.ordinal()]=			48;

	  LL1Table	[NontmlType.ParamMore.ordinal()][LexType.SEMI.ordinal()]=				49;
	 
	  LL1Table	[NontmlType.Param.ordinal()][LexType.INTEGER.ordinal()]=				50;
	  LL1Table	[NontmlType.Param.ordinal()][LexType.CHAR.ordinal()]=					50;
	  LL1Table	[NontmlType.Param.ordinal()][LexType.ARRAY.ordinal()]=					50;
	  LL1Table	[NontmlType.Param.ordinal()][LexType.RECORD.ordinal()]=				50;
	  LL1Table	[NontmlType.Param.ordinal()][LexType.ID.ordinal()]=					50;
	  
	  LL1Table	[NontmlType.Param.ordinal()][LexType.VAR.ordinal()]=					51;
	  
	  LL1Table	[NontmlType.FormList.ordinal()][LexType.ID.ordinal()]=					52;
	  
	  LL1Table	[NontmlType.FidMore.ordinal()][LexType.SEMI.ordinal()]=				53;
	  LL1Table	[NontmlType.FidMore.ordinal()][LexType.RPAREN.ordinal()]=				53;

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

	  LL1Table	[NontmlType.StmMore.ordinal()][LexType.END.ordinal()]=					59;
	  LL1Table	[NontmlType.StmMore.ordinal()][LexType.ENDWH.ordinal()]=				59;
	  LL1Table  [NontmlType.StmMore.ordinal()][LexType.ELSE.ordinal()]=				59;
	  LL1Table  [NontmlType.StmMore.ordinal()][LexType.FI.ordinal()]=					59;

	  LL1Table	[NontmlType.StmMore.ordinal()][LexType.SEMI.ordinal()]=				60;

	  LL1Table	[NontmlType.Stm.ordinal()][LexType.IF.ordinal()]=						61;
	  
	  LL1Table	[NontmlType.Stm.ordinal()][LexType.WHILE.ordinal()]=					62;
	  
	  LL1Table	[NontmlType.Stm.ordinal()][LexType.READ.ordinal()]=					63;
	  
	  LL1Table	[NontmlType.Stm.ordinal()][LexType.WRITE.ordinal()]=					64;
	  
	  LL1Table	[NontmlType.Stm.ordinal()][LexType.RETURN.ordinal()]=					65;
	  
	  LL1Table	[NontmlType.Stm.ordinal()][LexType.ID.ordinal()]=						66;
	  
	  LL1Table	[NontmlType.AssCall.ordinal()][LexType.ASSIGN.ordinal()]=				67;
	  LL1Table	[NontmlType.AssCall.ordinal()][LexType.LMIDPAREN.ordinal()]=			67;
	  LL1Table	[NontmlType.AssCall.ordinal()][LexType.DOT.ordinal()]= 				67;

	  
	  LL1Table	[NontmlType.AssCall.ordinal()][LexType.LPAREN.ordinal()]=				68;
	  
	  LL1Table	[NontmlType.AssignmentRest.ordinal()][LexType.ASSIGN.ordinal()]=		69;
	  LL1Table  [NontmlType.AssignmentRest.ordinal()][LexType.LMIDPAREN.ordinal()]=    69;
	  LL1Table  [NontmlType.AssignmentRest.ordinal()][LexType.DOT.ordinal()]=          69;
	  
	  LL1Table	[NontmlType.ConditionalStm.ordinal()][LexType.IF.ordinal()]=			70;
	  

	  LL1Table	[NontmlType.LoopStm.ordinal()][LexType.WHILE.ordinal()]=				71;
	  
	  LL1Table	[NontmlType.InputStm.ordinal()][LexType.READ.ordinal()]=				72;

	  LL1Table	[NontmlType.InVar.ordinal()][LexType.ID.ordinal()]=					73;

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

	  LL1Table	[NontmlType.Exp.ordinal()][LexType.LPAREN.ordinal()]=					83;
	  LL1Table	[NontmlType.Exp.ordinal()][LexType.INTC.ordinal()]=					83;
	  LL1Table	[NontmlType.Exp.ordinal()][LexType.ID.ordinal()]=						83;

	  LL1Table	[NontmlType.OtherTerm.ordinal()][LexType.LT.ordinal()]=				84;
	  LL1Table	[NontmlType.OtherTerm.ordinal()][LexType.EQ.ordinal()]=				84;
	  LL1Table	[NontmlType.OtherTerm.ordinal()][LexType.THEN.ordinal()]=				84;
	  LL1Table	[NontmlType.OtherTerm.ordinal()][LexType.DO.ordinal()]=				84;
	  LL1Table	[NontmlType.OtherTerm.ordinal()][LexType.RPAREN.ordinal()]=			84;
	  LL1Table	[NontmlType.OtherTerm.ordinal()][LexType.END.ordinal()]=				84;
	  LL1Table	[NontmlType.OtherTerm.ordinal()][LexType.SEMI.ordinal()]=				84;
	  LL1Table	[NontmlType.OtherTerm.ordinal()][LexType.COMMA.ordinal()]=				84;
	  LL1Table	[NontmlType.OtherTerm.ordinal()][LexType.ENDWH.ordinal()]=				84;
	  LL1Table	[NontmlType.OtherTerm.ordinal()][LexType.ELSE.ordinal()]=				84;
	  LL1Table	[NontmlType.OtherTerm.ordinal()][LexType.FI.ordinal()]=				84;
	  LL1Table  [NontmlType.OtherTerm.ordinal()][LexType.RMIDPAREN.ordinal()]=			84;
	  
	  
	  LL1Table	[NontmlType.OtherTerm.ordinal()][LexType.PLUS.ordinal()]=				85;
	  LL1Table	[NontmlType.OtherTerm.ordinal()][LexType.MINUS.ordinal()]=				85;

	  LL1Table	[NontmlType.Term.ordinal()][LexType.LPAREN.ordinal()]=					86;
	  LL1Table	[NontmlType.Term.ordinal()][LexType.INTC.ordinal()]=					86;
	  LL1Table	[NontmlType.Term.ordinal()][LexType.ID.ordinal()]=						86;

	  LL1Table	[NontmlType.OtherFactor.ordinal()][LexType.PLUS.ordinal()]=			87;
	  LL1Table	[NontmlType.OtherFactor.ordinal()][LexType.MINUS.ordinal()]=			87;
	  LL1Table	[NontmlType.OtherFactor.ordinal()][LexType.LT.ordinal()]=				87;
	  LL1Table	[NontmlType.OtherFactor.ordinal()][LexType.EQ.ordinal()]=				87;
	  LL1Table	[NontmlType.OtherFactor.ordinal()][LexType.THEN.ordinal()]=			87;
	  LL1Table	[NontmlType.OtherFactor.ordinal()][LexType.ELSE.ordinal()]=			87;
	  LL1Table	[NontmlType.OtherFactor.ordinal()][LexType.FI.ordinal()]=				87;
	  LL1Table	[NontmlType.OtherFactor.ordinal()][LexType.DO.ordinal()]=				87;
	  LL1Table	[NontmlType.OtherFactor.ordinal()][LexType.ENDWH.ordinal()]=			87;
	  LL1Table	[NontmlType.OtherFactor.ordinal()][LexType.RPAREN.ordinal()]=			87;
	  LL1Table	[NontmlType.OtherFactor.ordinal()][LexType.END.ordinal()]=				87;
	  LL1Table	[NontmlType.OtherFactor.ordinal()][LexType.SEMI.ordinal()]=			87;
	  LL1Table	[NontmlType.OtherFactor.ordinal()][LexType.COMMA.ordinal()]=			87;
	  LL1Table  [NontmlType.OtherFactor.ordinal()][LexType.RMIDPAREN.ordinal()]=		87;

	  LL1Table	[NontmlType.OtherFactor.ordinal()][LexType.TIMES.ordinal()]=			88;
	  LL1Table	[NontmlType.OtherFactor.ordinal()][LexType.OVER.ordinal()]=			88;

	  LL1Table	[NontmlType.Factor.ordinal()][LexType.LPAREN.ordinal()]=				89;

	  LL1Table	[NontmlType.Factor.ordinal()][LexType.INTC.ordinal()]=					90;
	  
	  LL1Table	[NontmlType.Factor.ordinal()][LexType.ID.ordinal()]=					91;
	  
	  LL1Table  [NontmlType.Variable.ordinal()][LexType.ID.ordinal()]=					92;

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

	  LL1Table  [NontmlType.VariMore.ordinal()][LexType.LMIDPAREN.ordinal()]=			94;
	  
	  LL1Table  [NontmlType.VariMore.ordinal()][LexType.DOT.ordinal()]=				95;

	  LL1Table  [NontmlType.FieldVar.ordinal()][LexType.ID.ordinal()]=                 96;

	  LL1Table  [NontmlType.FieldVarMore.ordinal()][LexType.ASSIGN.ordinal()]=			97;
	  LL1Table  [NontmlType.FieldVarMore.ordinal()][LexType.TIMES.ordinal()]=          97;
	  LL1Table  [NontmlType.FieldVarMore.ordinal()][LexType.OVER.ordinal()]=			97;
	  LL1Table  [NontmlType.FieldVarMore.ordinal()][LexType.PLUS.ordinal()]=           97;
	  LL1Table  [NontmlType.FieldVarMore.ordinal()][LexType.MINUS.ordinal()]=          97;
	  LL1Table  [NontmlType.FieldVarMore.ordinal()][LexType.LT.ordinal()]=				97;
	  LL1Table  [NontmlType.FieldVarMore.ordinal()][LexType.EQ.ordinal()]=				97;
	  LL1Table  [NontmlType.FieldVarMore.ordinal()][LexType.THEN.ordinal()]=			97;
	  LL1Table  [NontmlType.FieldVarMore.ordinal()][LexType.ELSE.ordinal()]=			97;
	  LL1Table  [NontmlType.FieldVarMore.ordinal()][LexType.FI.ordinal()]=				97;
	  LL1Table  [NontmlType.FieldVarMore.ordinal()][LexType.DO.ordinal()]=				97;
	  LL1Table  [NontmlType.FieldVarMore.ordinal()][LexType.ENDWH.ordinal()]=          97;
	  LL1Table  [NontmlType.FieldVarMore.ordinal()][LexType.RPAREN.ordinal()]=         97;
	  LL1Table  [NontmlType.FieldVarMore.ordinal()][LexType.END.ordinal()]=			97;
	  LL1Table  [NontmlType.FieldVarMore.ordinal()][LexType.SEMI.ordinal()]=			97;
	  LL1Table  [NontmlType.FieldVarMore.ordinal()][LexType.COMMA.ordinal()]=          97;

	  LL1Table  [NontmlType.FieldVarMore.ordinal()][LexType.LMIDPAREN.ordinal()]=      98;

	  LL1Table	[NontmlType.CmpOp.ordinal()][LexType.LT.ordinal()]=					99;
	  
	  LL1Table	[NontmlType.CmpOp.ordinal()][LexType.EQ.ordinal()]=					100;
	  
	  LL1Table	[NontmlType.AddOp.ordinal()][LexType.PLUS.ordinal()]=					101;
	  
	  LL1Table	[NontmlType.AddOp.ordinal()][LexType.MINUS.ordinal()]=					102;
	  
	  LL1Table	[NontmlType.MultOp.ordinal()][LexType.TIMES.ordinal()]=				103;
	  
	  LL1Table	[NontmlType.MultOp.ordinal()][LexType.OVER.ordinal()]=					104;

	}

	/********************************************************************/
	/* 函数名 gettoken					     							*/
	/* 功  能 从Token序列中取出一个Token	                            */										
	/* 说  明 从文件中存的Token序列中依次取一个单词,作为当前单词.      */
	/********************************************************************/
	void gettoken()
	{
	  if(tokenList.hasNext())
		  currentToken=tokenList.next();
	}


	/********************************************************************/
	/* 函数名 syntaxError												*/
	/* 功  能 语法错误处理函数											*/
	/* 说  明 将函数参数message指定的错误信息格式化写入列表文件listing	*/
	/*		  设置错误追踪标志isError为true								*/
	/********************************************************************/
	void syntaxError(String message)

	{ 
	  /* 将出错行号lineno和语法错误信息message格式化写入文件listing */
	 error.add(new Error(lineno,"Syntax error at line "+message));

	  /* 设置错误追踪标志isError为true,防止错误进一步传递 */
	  isError = true;
	}

	void process1()
	{  
	   Push(2, LexType.DOT.ordinal());
	   Push(1,NontmlType.ProgramBody.ordinal());
	   Push(1,NontmlType.DeclarePart.ordinal());
	   Push(1, NontmlType.ProgramHead.ordinal());
	    
	}

	/********************************************************************/
	/* 函数名 process2() 				     				*/
	/* 功  能 处理程序头,并生成程序头节点Phead.                        */										
	/* 说  明 产生式为:PROGRAM  ProgramName							*/
	/********************************************************************/
	void process2()
	{ 	
		Push(1,NontmlType.ProgramName.ordinal());
	    Push(2,LexType.PROGRAM.ordinal());
		
		TreeNode  t=PopPA();
		currentP=newPheadNode();  
	    (t)=currentP;
		/*程序头节点没有兄弟节点,下面的声明用用根节点的child[1]指向*/

	}

	void process3()
	{   
		Push(2,LexType.ID.ordinal());
	  
		currentP.name[0]=currentToken.sem;
	    currentP.idnum++;
	}

	void process4()
	{ 
		Push(1,NontmlType.ProcDec.ordinal());
	    Push(1,NontmlType.VarDec.ordinal());
		Push(1,NontmlType.TypeDec.ordinal());
	}
	void process5()
	{
	}
	void process6()
	{ 
	    Push(1,NontmlType.TypeDeclaration.ordinal());
	   
	}

	void process7()
	{ 
		Push(1,NontmlType.TypeDecList.ordinal());
	    Push(2,LexType.TYPE.ordinal());

		TreeNode   t=PopPA();  
	    currentP = newTypeNode();  /*生成Type作为标志的结点,它的子结点都是
	    						     类型声明*/
	   	( t) = currentP;    /*头结点的兄弟结点指针指向此结点*/
		PushPA(((currentP).sibling));  /* 压入指向变量声明节点的指针*/
		PushPA(((currentP).child[0])); /*压入指向第一个类型声明节点的指针*/
	}

	void process8()
	{ 
		Push(1,NontmlType.TypeDecMore.ordinal());
	    Push(2,LexType.SEMI.ordinal());
		Push(1,NontmlType.TypeName.ordinal());
		Push(2,LexType.EQ.ordinal());
		Push(1,NontmlType.TypeId.ordinal());

		TreeNode  t=PopPA();
	    currentP = newDecNode(); /*生成一个表示类型声明的结点,
		                           不添任何信息*/

		( t) = currentP; /*若是第一个,则是Type类型的子结点指向当前结点,
						   否则,是上一个类型声明的兄弟结点*/

	    PushPA(((currentP).sibling)); 
	}

	void process9()
	{
		PopPA();
	}

	void process10()
	{  
	   Push(1,NontmlType.TypeDecList.ordinal());

	}

	void process11()
	{  
		Push(2,LexType.ID.ordinal());
		
	    currentP.name[0]=currentToken.sem;
	    currentP.idnum++;
	}

	void process12()
	{
		Push(1,NontmlType.BaseType.ordinal());
		
		/*由于数组基类型的问题,这里不能直接用currentP.kind.dec=IntegerK;
		  而应该这么做,以适应所有情形*/
		temp=(currentP.kind.dec);

	}
	void process13()
	{  
		Push(1,NontmlType.StructureType.ordinal());
	}

	void process14()
	{ 
		Push(2,LexType.ID.ordinal());

		/*声明的类型部分为类型标识符*/
	    currentP.kind.dec=DecKind.IdK;
	   currentP.attr.type_name =currentToken.sem;    
	}

	void process15()
	{
		Push(2,LexType.INTEGER.ordinal());
		
		/*声明的类型部分为整数类型*/
	    (temp)=DecKind.IntegerK;
	}

	void process16()
	{
		Push(2,LexType.CHAR.ordinal());

		/*声明的类型部分为子符类型*/
	    temp =DecKind.CharK;
	}
	void process17()
	{  
		Push(1,NontmlType.ArrayType.ordinal());
	}
	void process18()
	{ 
		Push(1,NontmlType.RecType.ordinal());
	}
	void process19()
	{ 
	   Push(1,NontmlType.BaseType.ordinal());
	   Push(2,LexType.OF.ordinal());
	   Push(2,LexType.RMIDPAREN.ordinal());
	   Push(1,NontmlType.Top.ordinal());
	   Push(2,LexType.UNDERANGE.ordinal());
	   Push(1,NontmlType.Low.ordinal());
	   Push(2,LexType.LMIDPAREN.ordinal());
	   Push(2,LexType.ARRAY.ordinal());

	   /*声明的类型为数组类型*/
	   (currentP).kind.dec=DecKind.ArrayK;
	   temp = (currentP.attr.arrayAttr.childtype);

	}
	void process20()
	{ 
		Push(2,LexType.INTC.ordinal());
		
		/*存储数组的下届*/
		(currentP).attr.arrayAttr.low=Integer.parseInt(currentToken.sem);
	}
	void process21()
	{
		Push(2,LexType.INTC.ordinal());
		
		/*存储数组的上届*/
		(currentP).attr.arrayAttr.up=Integer.parseInt(currentToken.sem);
	}

⌨️ 快捷键说明

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