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;
}