ProgrammingLanguageNr1.Parser.arrayCreation C# (CSharp) Method

arrayCreation() private method

private arrayCreation ( ) : ProgrammingLanguageNr1.AST
return ProgrammingLanguageNr1.AST
        private AST arrayCreation()
        {
            #if WRITE_DEBUG_INFO
            Console.WriteLine("array");
            #endif
            match(Token.TokenType.BRACKET_LEFT);

            AST_ArrayEndSignal arrayTree =
                new AST_ArrayEndSignal(new Token(Token.TokenType.ARRAY_END_SIGNAL, "<ARRAY>"));

            int length = 0;

            if(lookAheadType(1) != Token.TokenType.BRACKET_RIGHT) {
                while(true) {

                    var expr = expression ();
                    if (expr == null) {
                        var token = lookAhead (1);
                        throw new Error("Problem with an expression in the array", Error.ErrorType.SYNTAX, token.LineNr, token.LinePosition);
                    }

                    arrayTree.addChild(expr);
                    length++;

                    if(lookAheadType(1) == Token.TokenType.BRACKET_RIGHT) {
                        break;
                    }
                    else if(lookAheadType(1) == Token.TokenType.COMMA) {
                        match(Token.TokenType.COMMA);
                    }
                    else {
                        // whitespace is enough! i.e. [1 2 3]
                    }
                }
                arrayTree.ArraySize = length;
            }
            else {
                // "array a = []" scenario
                arrayTree.ArraySize = 0;
            }

            match(Token.TokenType.BRACKET_RIGHT);

            return arrayTree;
        }