public static void VisitParenthesisExpressionChildren<TExpression>(
     IParenthesisExpression<TExpression> parenthesisExpression,
     IGenericExpressionVisitor visitor)
     where TExpression : IExpression
 {
     VisitIfNotNull(parenthesisExpression.Expression, visitor);
 }
 public override void VisitParenthesisExpression <TExpression>(
     IParenthesisExpression <TExpression> parenthesisExpression)
 {
     Value = new Expression()
     {
         ParenthesisExpression = new ParenthesisExpressionFactory(parenthesisExpression).Value
     };
 }
 /// <summary>
 /// Append expression
 /// </summary>
 /// <param name="exp"></param>
 /// <param name="postSeparator"></param>
 /// <returns></returns>
 public override PluralRuleExpressionPrinter Append(IExpression exp, string postSeparator = null)
 {
     if (exp == null)
     {
         return(this);
     }
     var x = exp switch
     {
         IPluralRuleExpression pre => Append(pre.Infos, " ").Append(pre.Rule, " ").Append(pre.Samples, " "),
         IPluralRuleInfosExpression infos => Append('[').Append(infos.Infos, ",").Append(']'),
         IPluralRuleInfoExpression info => Append(info.Name).Append('=').Append(info.Value),
         ISamplesExpression samples => (Append("@" + samples.Name + " ") as PluralRuleExpressionStringPrinter).AppendSamples(samples.Samples, ", "),
         IRangeExpression range => Append(range.MinValue).Append("..").Append(range.MaxValue),
         IGroupExpression group => Append(group.Values, ","),
         IInfiniteExpression inf => Append('…'),
         IConstantExpression c => Append(c.Value?.ToString()),
         IArgumentNameExpression arg => Append(arg.Name),
         IParenthesisExpression par => Append('(').Append(par.Element).Append(')'),
         IUnaryOpExpression uop => Append(uop.Op switch { UnaryOp.Plus => "+", UnaryOp.Not => "not ", UnaryOp.OnesComplement => "~", UnaryOp.Negate => "-", _ => "¤" }).Append(uop.Element),
 public override void VisitParenthesisExpression <TExpression>(IParenthesisExpression <TExpression> parenthesisExpression)
 {
     Steps.Add(new WriteStartParenthesis());
     Steps.Add(new WriteExpression <TExpression>(parenthesisExpression.Expression));
     Steps.Add(new WriteEndParenthesis());
 }
 public virtual void VisitParenthesisExpression <TExpression>(IParenthesisExpression <TExpression> parenthesisExpression)
     where TExpression : IExpression
 {
     Visit(parenthesisExpression);
 }