Exemple #1
0
        // Returns NProgram
        public Node Program()
        {
            NProgram    nProgram    = new NProgram();
            NVarDefList nVarDefList = new NVarDefList();
            NFunDefList nFunDefList = new NFunDefList();

            while (firstOfProgram.Contains(CurrentToken))
            {
                if (CurrentToken == TokenCategory.VAR)
                {
                    VarDef(nVarDefList);
                }
                else if (CurrentToken == TokenCategory.IDENTIFIER)
                {
                    FunDef(nFunDefList);
                }
                else if (CurrentToken == TokenCategory.EOF)
                {
                    break;
                }
                else
                {
                    throw new SyntaxError(firstOfProgram, tokenStream.Current);
                }
            }
            if (!firstOfProgram.Contains(CurrentToken))
            {
                throw new SyntaxError(new HashSet <TokenCategory>()
                {
                    TokenCategory.IDENTIFIER,
                    TokenCategory.VAR,
                    TokenCategory.EOF
                }
                                      , tokenStream.Current);
            }
            nProgram.Add(nVarDefList);
            nProgram.Add(nFunDefList);
            return(nProgram);
        }