public static ITranslation For(DynamicExpression dynamicExpression, ITranslationContext context)
        {
            var args = new DynamicTranslationArgs(dynamicExpression, context);

            if (DynamicMemberAccessTranslation.TryGetTranslation(args, out var translation))
            {
                return(translation);
            }

            if (DynamicMemberWriteTranslation.TryGetTranslation(args, out translation))
            {
                return(translation);
            }

            if (DynamicMethodCallTranslation.TryGetTranslation(args, out translation))
            {
                return(translation);
            }

            return(new FixedValueTranslation(
                       ExpressionType.Dynamic,
                       args.OperationDescription,
                       dynamicExpression.Type,
                       TokenType.Default,
                       context));
        }
            public static bool TryGetTranslation(DynamicTranslationArgs args, out ITranslation translation)
            {
                if (!args.IsMatch(_matcher, out var match))
                {
                    translation = null;
                    return(false);
                }

                var targetTranslation = DynamicMemberAccessTranslation.GetTranslation(args, match);

                translation = new AssignmentTranslation(
                    ExpressionType.Assign,
                    targetTranslation,
                    args.LastArgument,
                    args.Context);

                return(true);
            }