示例#1
0
        public void Test()
        {
            //make pattern for whole numbers divisible by 3

            //digits mod 3
            var d0 = CharRange.AnyOf("0369");
            var d1 = Pattern.Match(CharRange.AnyOf("147")).ThenMaybeRepeat(d0);
            var d2 = Pattern.Match(CharRange.AnyOf("258")).ThenMaybeRepeat(d0);

            var plus2 = Pattern.MaybeRepeat(d1.Then(d2)).Then(Pattern.AnyOf(d1.Then(d1), d2));

            var minus2 = Pattern.MaybeRepeat(d2.Then(d1)).Then(Pattern.AnyOf(d2.Then(d2), d1));

            var by3 = Pattern.MaybeRepeat(Pattern.AnyOf(d0, d1.Then(d2), plus2.Then(minus2)));

            var builder = new DfaBuilder <bool>();

            builder.AddPattern(by3, true);
            var start = builder.Build(new HashSet <bool> {
                true
            }, null);

            Assert.Equal(3, CountStates(start));
            CheckDfa(start, "By3Test.out.txt", false);
        }
示例#2
0
        public void TestRegexParser()
        {
            IMatchable p1, p2;

            p1 = Pattern.AnyOf("A", "B");
            p2 = Pattern.Regex("A|B");
            Check(p1, p2);

            p1 = Pattern.Match("A").Then(Pattern.AnyOf("C", "D"));
            p2 = Pattern.Regex("A(C|D)");
            Check(p1, p2);

            p1 = Pattern.Match("A").Then(Pattern.AnyOf("C", "D")).Then("B");
            p2 = Pattern.Regex("A(C|D)B");
            Check(p1, p2);

            p1 = Pattern.Match("A").ThenMaybe(Pattern.AnyOf("C", "D")).Then("B");
            p2 = Pattern.Regex("A(C|D)?B");
            Check(p1, p2);

            p1 = Pattern.Match("A").ThenRepeat(Pattern.AnyOf("C", "D")).Then("B");
            p2 = Pattern.Regex("A(C|D)+B");
            Check(p1, p2);

            p1 = Pattern.Match("A").ThenMaybeRepeat(Pattern.AnyOf("C", "D")).Then("B");
            p2 = Pattern.Regex("A(C|D)*B");
            Check(p1, p2);

#pragma warning disable 618
            p1 = Pattern.Match("A").ThenMaybe(Pattern.AnyOf("C", "D")).Then("B");
            p2 = Pattern.Regex("A(C|D)??B", RegexOptions.Legacy);
            Check(p1, p2);

            p1 = Pattern.Match("A").ThenMaybeRepeat(Pattern.AnyOf("C", "D")).Then("B");
            p2 = Pattern.Regex("A(C|D)+?B", RegexOptions.Legacy);
            Check(p1, p2);

            p1 = Pattern.Match("A").ThenMaybeRepeat(Pattern.AnyOf("C", "D")).Then("B");
            p2 = Pattern.Regex("A(C|D)*?B", RegexOptions.Legacy);
            Check(p1, p2);
#pragma warning restore 618

            p1 = Pattern.AnyOf(Pattern.Match("A").ThenMaybeRepeat("B"), Pattern.Match("C"));
            p2 = Pattern.Regex("AB*|C");
            Check(p1, p2);

            p1 = Pattern.Regex("\\s\\S\\d\\D\\w\\W");
            p2 = Pattern.Regex("[ \\t\\n\\x0B\\f\\r][^ \\t\\n\\x0B\\f\\r][0-9][^0-9][a-zA-Z_0-9][^a-zA-Z_0-9]");
            Check(p1, p2);

            p1 = Pattern.Regex("[^\\d][\\d]");
            p2 = Pattern.Regex("[\\D][^\\D]");
            Check(p1, p2);

            p1 = Pattern.Regex("[Cc][Aa][Tt][^0-9a-fA-F][^0-9a-f@-F]");
            p2 = Pattern.RegexI("cAt[^\\da-f][^\\d@-F]");
            Check(p1, p2);
        }