public CapturingGroupBrick Clone(IFlexpressionAlgebra algebra, string groupName, bool freeze = false) { var expressionType = string.Equals(groupName, _expressionType.Name) ? _expressionType : ExpressionTypeDescriptor.Create(groupName, _expressionType.ValueTypeId, _expressionType.DefinesExpressionClass); return(new CapturingGroupBrick(expressionType, algebra.GetHighestPrioritizedAlgebra(this), Content, freeze)); }
/// <inheritdoc /> protected override IParsingProduct TryParseInternal(IParsingContextStream ctx, ParsingOptions options) { var res = Content.TryParse(ctx, options); if (res == null) { ctx.SetError(new ParsingError(1, $"{GroupName} expected at: '{ctx}'; {Name}")); return(null); } var overwriteExpressionType = res.ExpressionType.ValueTypeId != null && _expressionType.ValueTypeId == null; var expressionType = overwriteExpressionType ? ExpressionTypeDescriptor.Create(_expressionType.Name, res.ExpressionType.ValueTypeId, _expressionType.DefinesExpressionClass) : _expressionType; var node = ctx.Accept().CreateExpressionForAcceptedFragment( expressionType, res.ToList()); return(node); }