Exemplo n.º 1
0
        public void Test_IntersectionComplex()
        {
            var ra = RegExFactory.Union(RegExFactory.Range <char> ('a'), RegExFactory.Range <char> ('z'));
            var rb = RegExFactory.Range <char> ('b');
            var rc = RegExFactory.Range <char> ('c');

            var r1 = RegExFactory.Intersection(ra);

            Assert.AreEqual(ra.ToString(), r1.ToString());

            var r2 = RegExFactory.Intersection(ra, rb);

            Assert.AreEqual(rb + " & (" + ra + ")", r2.ToString());

            var r3 = RegExFactory.Intersection(ra, rb, rc);

            Assert.AreEqual(rb + " & " + rc + " & (" + ra + ")", r3.ToString());
        }
Exemplo n.º 2
0
        public void Test_UnionSimple()
        {
            var ra = RegExFactory.Range <char> ('a');
            var rb = RegExFactory.Range <char> ('b');
            var rc = RegExFactory.Range <char> ('c');

            var r1 = RegExFactory.Union(ra);

            Assert.AreEqual(ra.ToString(), r1.ToString());

            var r2 = RegExFactory.Union(ra, rb);

            Assert.AreEqual(ra + " | " + rb, r2.ToString());

            var r3 = RegExFactory.Union(ra, rb, rc);

            Assert.AreEqual(ra + " | " + rb + " | " + rc, r3.ToString());
        }
        public void Test_Sum()
        {
            var regA = RegExFactory.Range('a');
            var regB = RegExFactory.Range('b');
            var regC = RegExFactory.Range('c');

            var regAB  = RegExFactory.Union(regA, regB);
            var regBC  = RegExFactory.Union(regB, regC);
            var regABC = RegExFactory.Union(regA, regB, regC);

            var derivA = regA.Derivative('a');
            var derivB = regB.Derivative('a');
            var derivC = regC.Derivative('a');

            var derivAB  = regAB.Derivative('a');
            var derivBC  = regBC.Derivative('a');
            var derivABC = regABC.Derivative('a');

            Assert.AreEqual(derivAB, RegExFactory.Union(derivA, derivB));
            Assert.AreEqual(derivBC, RegExFactory.Union(derivB, derivC));
            Assert.AreEqual(derivABC, RegExFactory.Union(derivA, derivB, derivC));
        }
        public void Test_Concat_XYZ_withEpsiX()
        {
            var regX = RegExFactory.Range('a');
            var X    = RegExFactory.Star(regX);           // contains epsi
            var Y    = RegExFactory.Range('b');
            var Z    = RegExFactory.Range('c');

            var derivX = X.Derivative('a');
            var derivY = Y.Derivative('a');

            var concat      = RegExFactory.Concat(X, Y, Z);
            var derivConcat = concat.Derivative('a');

            Assert.IsTrue(X.HasEpsilon());
            Assert.IsFalse(Y.HasEpsilon());
            Assert.IsFalse(Z.HasEpsilon());
            Assert.AreEqual(
                RegExFactory.Union(
                    RegExFactory.Concat(derivX, Y, Z),
                    RegExFactory.Concat(derivY, Z)
                    ), derivConcat);
        }
Exemplo n.º 5
0
        public void Test_Epsi()
        {
            var epsi   = RegExFactory.Epsilon <char> ();
            var range  = RegExFactory.Range('a');
            var range2 = RegExFactory.Range('b');

            Assert.AreEqual(0, epsi.CompareTo(epsi));                                    // epsi == epsi
            Assert.AreEqual(0, epsi.CompareTo(RegExFactory.Epsilon <char>()));           // epsi == epsi

            Assert.IsTrue(epsi.CompareTo(RegExFactory.Range('a')) < 0);                  // epsi < RegExRange(...)
            Assert.IsTrue(epsi.CompareTo(RegExFactory.Range('a', 'b')) < 0);             // epsi < RegexRange(...)

            Assert.IsTrue(epsi.CompareTo(RegExFactory.Empty <char> ()) < 0);             // epsi < empty
            Assert.IsTrue(epsi.CompareTo(RegExFactory.All <char> ()) < 0);               // epsi < all

            Assert.IsTrue(epsi.CompareTo(RegExFactory.Star(range)) < 0);                 // epsi < star
            Assert.IsTrue(epsi.CompareTo(RegExFactory.Complement(range)) < 0);           // epsi < complement

            Assert.IsTrue(epsi.CompareTo(RegExFactory.Concat(range, range)) < 0);        // epsi < concat
            Assert.IsTrue(epsi.CompareTo(RegExFactory.Union(range, range2)) < 0);        // epsi < union
            Assert.IsTrue(epsi.CompareTo(RegExFactory.Intersection(range, range2)) < 0); // epsi < intersection
        }
Exemplo n.º 6
0
        public void Test_Order()
        {
            var epsi   = RegExFactory.Epsilon <char>();                  // typeId = 0
            var range  = RegExFactory.Range('a');                        // typeId = 1
            var range2 = RegExFactory.Range('b');                        // typeId = 1
            var star   = RegExFactory.Star(range);                       // typeId = 2
            var compl  = RegExFactory.Complement(range);                 // typeId = 3
            var concat = RegExFactory.Concat(range, star);               // typeId = 4
            var union  = RegExFactory.Union(range, star, range2);        // typeId = 5
            var inter  = RegExFactory.Intersection(range, star, range2); // typeId = 6

            // a < b
            Assert.IsTrue(epsi.CompareTo(range) < 0);
            Assert.IsTrue(range.CompareTo(star) < 0);
            Assert.IsTrue(star.CompareTo(compl) < 0);
            Assert.IsTrue(compl.CompareTo(concat) < 0);
            Assert.IsTrue(concat.CompareTo(union) < 0);
            Assert.IsTrue(union.CompareTo(inter) < 0);

            // a > b
            Assert.IsTrue(range.CompareTo(epsi) > 0);
            Assert.IsTrue(star.CompareTo(range) > 0);
            Assert.IsTrue(compl.CompareTo(star) > 0);
            Assert.IsTrue(concat.CompareTo(compl) > 0);
            Assert.IsTrue(union.CompareTo(concat) > 0);
            Assert.IsTrue(inter.CompareTo(union) > 0);

            // a = b
            Assert.IsTrue(epsi.CompareTo(epsi) == 0);
            Assert.IsTrue(range.CompareTo(range) == 0);
            Assert.IsTrue(star.CompareTo(star) == 0);
            Assert.IsTrue(compl.CompareTo(compl) == 0);
            Assert.IsTrue(concat.CompareTo(concat) == 0);
            Assert.IsTrue(union.CompareTo(union) == 0);
            Assert.IsTrue(inter.CompareTo(inter) == 0);
        }
Exemplo n.º 7
0
            public static RegexSymbol MakeUnion(params TokenCategory[] tokens)
            {
                var regexes = tokens.Select(t => ((RegexSymbol)t)._regexSymbol()).ToArray();

                return(new RegexSymbol(() => RegExFactory.Union(regexes)));
            }
Exemplo n.º 8
0
 public static RegexSymbol operator+(RegexSymbol left, RegexSymbol right)
 {
     return(new RegexSymbol(() => RegExFactory.Union <Symbol>(left, right)));
 }
Exemplo n.º 9
0
        public void TestAllAtOnce()
        {
            var result = RegExParser.Parse("(^(a|(b|c)*))[^:space:]");
            var regEx  = RegExFactory.Concat(RegExFactory.Complement(RegExFactory.Union(RegExFactory.Range('a', 'b'), RegExFactory.Star(RegExFactory.Union(RegExFactory.Range('b', 'c'), RegExFactory.Range('c', 'd'))))), RegExFactory.Intersection(RegExFactory.Range((char)0), RegExFactory.Complement(CharactersClasses.space)));

            Assert.AreEqual(result, RegExFactory.Intersection(regEx, RegExFactory.Star(CharactersClasses.print)));
        }
Exemplo n.º 10
0
        public void TestNotAllowedCharacters()
        {
            var result = RegExParser.Parse("[^ab]");
            var regEx  = RegExFactory.Intersection(RegExFactory.Range((char)0), RegExFactory.Complement(RegExFactory.Union(RegExFactory.Range('a', 'b'), RegExFactory.Range('b', 'c'))));

            Assert.AreEqual(result, RegExFactory.Intersection(regEx, RegExFactory.Star(CharactersClasses.print)));
        }