📄 parseb.java
字号:
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 + -