//dache public Node Program() { var program = new Program(); var statList = new StatementList(); var procDecList = new ProcedureDeclarationList(); var consDecList = new ConstantDeclarationList(); //var consDecList2 = VariableDeclaration(); //var varDecList = new VariableDeclarationList(); if (CurrentToken == TokenCategory.CONST) { consDecList.AnchorToken = Expect(TokenCategory.CONST); var i = 0; do { consDecList.Add(ConstantDeclaration()); Console.WriteLine(consDecList[i]); i++; } while (CurrentToken == TokenCategory.IDENTIFIER); program.Add(consDecList); } if (CurrentToken == TokenCategory.VAR) { var varDecList = VariableDeclaration(); program.Add(varDecList); } while (CurrentToken == TokenCategory.PROCEDURE) { procDecList.Add(ProcedureDeclaration()); } if (procDecList.getLength() > 0) { program.Add(procDecList); } Expect(TokenCategory.PROGRAM); while (firstOfStatement.Contains(CurrentToken)) { statList.Add(Statement()); } if (statList.getLength() > 0) { program.Add(statList); } Expect(TokenCategory.END); Expect(TokenCategory.ENDLINE); Expect(TokenCategory.EOF); return(program); }
public Node ProcedureDeclaration() { var procedure = new ProcedureDeclaration(); Expect(TokenCategory.PROCEDURE); procedure.AnchorToken = Expect(TokenCategory.IDENTIFIER); var consDecList = new ConstantDeclarationList(); var statement = new StatementList(); Expect(TokenCategory.INITPARENTHESIS); if (CurrentToken == TokenCategory.IDENTIFIER) { var parDecList = ParameterDeclaration(); procedure.Add(parDecList); } Expect(TokenCategory.CLOSINGPARENTHESIS); if (CurrentToken == TokenCategory.DECLARATION) { Expect(TokenCategory.DECLARATION); var type = Type(); procedure.Add(type); } Expect(TokenCategory.ENDLINE); if (CurrentToken == TokenCategory.CONST) { consDecList.AnchorToken = Expect(TokenCategory.CONST); var i = 0; do { consDecList.Add(ConstantDeclaration()); Console.WriteLine(consDecList[i]); i++; } while (CurrentToken == TokenCategory.IDENTIFIER); procedure.Add(consDecList); } if (CurrentToken == TokenCategory.VAR) { var varDecList = VariableDeclaration(); procedure.Add(varDecList); } var tempStatement = Expect(TokenCategory.BEGIN); while (firstOfStatement.Contains(CurrentToken)) { statement.Add(Statement()); } if (statement.getLength() > 0) { statement.AnchorToken = tempStatement; procedure.Add(statement); } Expect(TokenCategory.END); Expect(TokenCategory.ENDLINE); return(procedure); }