public override Expression VisitAssignment(AssignmentContext context) { var unaryExpression = Visit(context.unary_expression()); var expression = Visit(context.expression()); var op = context.assignment_operator().GetText(); if (op == "=") { return(Expression.Assign(unaryExpression, expression)); } if (op == "+=") { return(Expression.AddAssign(unaryExpression, expression)); } if (op == "-=") { return(Expression.SubtractAssign(unaryExpression, expression)); } if (op == "*=") { return(Expression.MultiplyAssign(unaryExpression, expression)); } if (op == "/=") { return(Expression.DivideAssign(unaryExpression, expression)); } if (op == "%=") { return(Expression.ModuloAssign(unaryExpression, expression)); } if (op == "&=") { return(Expression.AndAssign(unaryExpression, expression)); } if (op == "|=") { return(Expression.OrAssign(unaryExpression, expression)); } if (op == "^=") { return(Expression.ExclusiveOrAssign(unaryExpression, expression)); } if (op == "<<=") { return(Expression.LeftShiftAssign(unaryExpression, expression)); } if (op == ">>=") { return(Expression.RightShiftAssign(unaryExpression, expression)); } throw new CompilationException($"Unsupported operation. Operation={op}", context); }