private AST assignmentAndOperator()
{
#if WRITE_DEBUG_INFO
Console.WriteLine("assignment and operator");
#endif
Token nameToken = match(Token.TokenType.NAME);
Token operatorToken = match(Token.TokenType.OPERATOR);
AST expressionTree = expression();
if(expressionTree != null) {
AST_Assignment assignmentTree = new AST_Assignment(new Token(Token.TokenType.ASSIGNMENT, "="), nameToken.getTokenString());
AST selfOperation = null;
if(operatorToken.getTokenString() == "+=") {
selfOperation = new AST(new Token(Token.TokenType.OPERATOR, "+"));
}
else if(operatorToken.getTokenString() == "*=") {
selfOperation = new AST(new Token(Token.TokenType.OPERATOR, "*"));
}
else if(operatorToken.getTokenString() == "-=") {
selfOperation = new AST(new Token(Token.TokenType.OPERATOR, "-"));
}
else if(operatorToken.getTokenString() == "/=") {
selfOperation = new AST(new Token(Token.TokenType.OPERATOR, "/"));
}
else {
throw new Error("Can't handle the operator '" + operatorToken.getTokenString() + "'",
Error.ErrorType.SYNTAX, assignmentTree.getToken().LineNr,
assignmentTree.getToken().LinePosition);
}
selfOperation.addChild(nameToken);
selfOperation.addChild(expressionTree);
assignmentTree.addChild(selfOperation);
return assignmentTree;
}
else {
throw new Error("The expression after " + operatorToken.getTokenString()
+ " makes no sense", Error.ErrorType.SYNTAX,
operatorToken.LineNr, operatorToken.LinePosition);
}
}