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