ProgrammingLanguageNr1.Parser.figureOutStatementType C# (CSharp) Method

figureOutStatementType() private method

private figureOutStatementType ( ) : ProgrammingLanguageNr1.AST
return ProgrammingLanguageNr1.AST
        private AST figureOutStatementType()
        {
            AST statementTree = null;

            if (lookAheadType(1) == Token.TokenType.NAME &&
                lookAheadType(2) == Token.TokenType.NAME) {
                throw new Error("Can't understand what the word '" + lookAhead(1).getTokenString() + "' means here", Error.ErrorType.SYNTAX, lookAhead(1).LineNr, lookAhead(1).LinePosition);
            }
            else if ( lookAheadType(1) == Token.TokenType.BUILT_IN_TYPE_NAME &&
                 lookAheadType(2) == Token.TokenType.NAME &&
                 lookAheadType(3) == Token.TokenType.PARANTHESIS_LEFT )
            {
                m_functionList.addChild(functionDeclaration());
                checkThatItsTheEndOfTheLine();
            }
            else if (lookAheadType(1) == Token.TokenType.LOOP)
            {
                statementTree = loop();
            }
            else if (lookAheadType(1) == Token.TokenType.BUILT_IN_TYPE_NAME &&
                     lookAheadType(2) == Token.TokenType.NAME)
            {
                if (lookAheadType(3) == Token.TokenType.ASSIGNMENT) {
                    statementTree = declarationAndAssignment();
                    checkThatItsTheEndOfTheLine();
                } else {
                    statementTree = declaration();
                    checkThatItsTheEndOfTheLine();
                }
            }
            else if (lookAhead(1).getTokenString() == "@" &&
                     lookAheadType(2) == Token.TokenType.ASSIGNMENT)
            {
                throw new Error("Can't assign to @", Error.ErrorType.SYNTAX, lookAhead(1).LineNr, lookAhead(1).LinePosition);
            }
            else if (lookAheadType(1) == Token.TokenType.NAME)
            {
                if (lookAheadType(2) == Token.TokenType.ASSIGNMENT)
                {
                    statementTree = assignment();
                    checkThatItsTheEndOfTheLine();
                }
                else if(lookAheadType(2) == Token.TokenType.OPERATOR &&
                       (lookAhead(2).getTokenString() == "++" || lookAhead(2).getTokenString() == "--") )
                {
                    statementTree = plusplusOrMinusminus();
                }
                else if(lookAheadType(2) == Token.TokenType.BRACKET_LEFT)
                {
                    statementTree = assignmentToArray();
                }
                else if(lookAhead(2).getTokenString() == "+=" || lookAhead(2).getTokenString() == "*=" || lookAhead(2).getTokenString() == "-=" || lookAhead(2).getTokenString() == "/=")
                {
                    statementTree = assignmentAndOperator();
                }
                else
                {
                    statementTree = expression();
                    checkThatItsTheEndOfTheLine(); // makes the bodies of if-statements require new line for statements
                }
            }
            else if (lookAheadType(1) == Token.TokenType.NUMBER ||
                     lookAheadType(1) == Token.TokenType.PARANTHESIS_LEFT)
            {
                statementTree = expression();
                checkThatItsTheEndOfTheLine(); // see above
            }
            else if (lookAheadType(1) == Token.TokenType.IF)
            {
                statementTree = ifThenElse();
            }
            else if (lookAheadType(1) == Token.TokenType.RETURN)
            {
                statementTree = returnFromFunction();
            }
            else if (lookAheadType(1) == Token.TokenType.BREAK)
            {
                statementTree = breakStatement();
            }
            else if (lookAheadType(1) == Token.TokenType.NEW_LINE)
            {
                match(Token.TokenType.NEW_LINE); // just skip
            }
            else
            {
                throw new Error("Can't understand what the word '" + lookAhead(1).getTokenString() + "' means here",
                    Error.ErrorType.SYNTAX, lookAhead(1).LineNr, lookAhead(1).LinePosition);
            }

            return statementTree;
        }