Example #1
0
        //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);
        }
Example #2
0
        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);
        }