private BinaryDecisionDiagram GenerateWhiteSpace()
    {
        var bddBuilder = new BddBuilder(_bits);
        var ranges     = _rangesLoader.Value.Item2.ranges;

        return(bddBuilder.CreateFromRanges(ranges));
    }
    private IDictionary <UnicodeCategory, BinaryDecisionDiagram> GenerateCategory()
    {
        var bddBuilder   = new BddBuilder(_bits);
        var result       = new Dictionary <UnicodeCategory, BinaryDecisionDiagram>();
        var sourceRanges = _rangesLoader.Value.Item1;

        foreach (var kv in sourceRanges)
        {
            result[kv.Key] = bddBuilder.CreateFromRanges(kv.Value.ranges);
        }

        return(result);
    }
    private BinaryDecisionDiagram GenerateWordCharacter()
    {
        var categories       = Category;
        var bddBuilder       = new BddBuilder(_bits);
        var wordCharacterBdd = bddBuilder.Or(
            categories[UnicodeCategory.UppercaseLetter],
            bddBuilder.Or(
                categories[UnicodeCategory.LowercaseLetter],
                bddBuilder.Or(
                    categories[UnicodeCategory.TitlecaseLetter],
                    bddBuilder.Or(
                        categories[UnicodeCategory.ModifierLetter],
                        bddBuilder.Or(
                            categories[UnicodeCategory.OtherLetter],
                            bddBuilder.Or(
                                categories[UnicodeCategory.DecimalDigitNumber],
                                categories[UnicodeCategory.ConnectorPunctuation]))))));

        return(wordCharacterBdd);
    }
示例#4
0
    /// <summary>
    /// Initializes a new instance of the <see cref="RexEngine"/> class.
    /// </summary>
    /// <param name="options">A bitwise combination of the <see cref="RegexOptions"/> values that provide options for generation members from a regular expression.</param>
    /// <param name="encoding">An encoding, representing a character set to generate members from.</param>
    /// <exception cref="ArgumentException"><paramref name="options"/> is not a valid enum.</exception>
    /// <exception cref="ArgumentNullException"><paramref name="encoding"/> is <c>null</c>.</exception>
    public RexEngine(RegexOptions options, Encoding encoding)
    {
        if (!options.IsValid())
        {
            throw new ArgumentException($"The { nameof(RegexOptions) } provided must be a valid enum.", nameof(options));
        }
        if (encoding == null)
        {
            throw new ArgumentNullException(nameof(encoding));
        }

        _options = options;

        var nbits = GetEncodingBitSize(encoding);

        _solver  = new BddBuilder(nbits);
        _chooser = new Chooser();

        var categoryProvider = new UnicodeCategoryConditionsBddProvider(encoding, nbits);

        _regexConverter = new RegexToSfa <BinaryDecisionDiagram>(_solver, categoryProvider);
    }