ProgrammingLanguageNr1.Parser.assignmentToArray C# (CSharp) Method

assignmentToArray() private method

private assignmentToArray ( ) : ProgrammingLanguageNr1.AST
return ProgrammingLanguageNr1.AST
        private AST assignmentToArray()
        {
            #if WRITE_DEBUG_INFO
            Console.WriteLine("assignment to array");
            #endif

            Token nameToken = null;
            AST indexNode = null;

            #if WRITE_DEBUG_INFO
                Console.WriteLine("normal array");
            #endif
            nameToken = match(Token.TokenType.NAME);
            match(Token.TokenType.BRACKET_LEFT);
            indexNode = expression();
            match(Token.TokenType.BRACKET_RIGHT);

            if(lookAheadType(1) == Token.TokenType.NEW_LINE ||
               lookAheadType(1) == Token.TokenType.EOF)
            {
                // it's a statement without assignment
                return indexNode;
            }

            Token assignmentToken = match(Token.TokenType.ASSIGNMENT);
            AST expressionTree = expression();

            if(expressionTree != null) {
                Token arrayAssignmentToken = new Token(Token.TokenType.ASSIGNMENT_TO_ARRAY, "=", assignmentToken.LineNr, assignmentToken.LinePosition);
                AST_Assignment assignmentTree = new AST_Assignment(arrayAssignmentToken, nameToken.getTokenString());
                assignmentTree.addChild(indexNode);
                assignmentTree.addChild(expressionTree);

                /*ASTPainter p = new ASTPainter();
                Console.WriteLine("---AST---");
                p.PaintAST(assignmentTree);
                Console.WriteLine("---------");*/
                return assignmentTree;
            }
            else {
                throw new Error("The expression after = makes no sense", Error.ErrorType.SYNTAX,
                    assignmentToken.LineNr, assignmentToken.LinePosition);
            }
        }