CiMaybeAssign ParseMaybeAssign()
{
CiExpr left = ParseExpr();
CiToken op = this.CurrentToken;
if (op == CiToken.Assign || op == CiToken.AddAssign || op == CiToken.SubAssign || op == CiToken.MulAssign || op == CiToken.DivAssign || op == CiToken.ModAssign
|| op == CiToken.AndAssign || op == CiToken.OrAssign || op == CiToken.XorAssign || op == CiToken.ShiftLeftAssign || op == CiToken.ShiftRightAssign) {
NextToken();
CiAssign result = new CiAssign();
result.Target = left;
result.Op = op;
result.Source = ParseMaybeAssign();
return result;
}
return left;
}