예제 #1
0
        public IMatch Match(string myString)
        {
            var authority = new Sequance(new Optional(new Sequance(new Userinfo(),
                                                                   new Character('@'))), new Host(), new Optional(new Port()));

            return(authority.Match(myString));
        }
예제 #2
0
        public RequestLine()
        {
            var token = new OneOrMore(new Choice(
                                          new Character('!'),
                                          new Range('#', '\''),
                                          new Range('*', '+'),
                                          new Range('-', '.'),
                                          new Range('^', '`'),
                                          new Range('0', '9'),
                                          new Range('a', 'z'),
                                          new Range('A', 'Z'),
                                          new Character('|'),
                                          new Character('~')));

            var digits          = new OneOrMore(new Range('0', '9'));
            var extensionMethod = token;

            var method = new Choice(
                new Text("OPTIONAL"),
                new Text("GET"),
                new Text("HEAD"),
                new Text("POST"),
                new Text("PUT"),
                new Text("DELETE"),
                new Text("CONNECT"),
                new Text("TRACE"));

            var slash       = new Character('/');
            var period      = new Character('.');
            var space       = new Character(' ');
            var lineEnd     = new Text("\r\n");
            var httpVersion = new Sequance(new Text("HTTP"), slash, digits, period, digits);

            this.pattern = new Sequance(method, space, new RequestURI(), space, httpVersion, lineEnd);
        }
예제 #3
0
        public IMatch Match(string myString)
        {
            IPattern method = new Choice(new Text("OPTIONS"), new Text("GET"), new Text("HEAD"), new Text("POST"),
                                         new Text("PUT"), new Text("DELETE"), new Text("TRACE"), new Text("CONNECT"));
            IPattern requestLine = new Sequance(method, new Text("HTTP/1.1\r"));

            return(requestLine.Match(myString));
        }
예제 #4
0
        public IMatch Match(string myString)
        {
            var uri = new Sequance(new Optional(new Scheme()), new Optional(new Text("//")), new Optional(new Authority()), new Path(),
                                   new Optional(new Sequance(new Character('?'), new Querry())),
                                   new Optional(new Sequance(new Character('#'), new Fragment())));

            return(uri.Match(myString));
        }
예제 #5
0
        public IMatch Match(string scheme)
        {
            var alpha          = new Choice(new Range('a', 'z'), new Range('A', 'Z'));
            var schemeContent  = new Sequance(alpha, new OneOrMore(new Choice(alpha, new Range('0', '9'), new Any("+-."))));
            var schemeEndChar  = new Character(':');
            var schemeComplete = new Sequance(schemeContent, schemeEndChar);

            return(schemeComplete.Match(scheme));
        }
예제 #6
0
        public IMatch Match(string myString)
        {
            var digit      = new Range('0', '9');
            var maxPort    = new Sequance(new Range('6', '6'), new Range('5', '5'), new Range('0', '5'), new Range('0', '3'), new Range('0', '5'));
            var maxPortTwo = new Sequance(new Range('0', '6'), new Range('0', '4'), new Many(digit, 1, 4));
            var port       = new Sequance(new Character(':'), new Choice(maxPort, maxPortTwo, new Many(digit, 1, 4)));

            return(port.Match(myString));
        }
예제 #7
0
        public void ForabcdForabShouldReturncdForTrue()
        {
            var ab = new Sequance(
                new Character('a'),
                new Character('b'));

            IMatch actual = ab.Match("abcd");

            Assert.Equal("cd", actual.RemainingText());
        }
예제 #8
0
        public void ForNullShouldReturnNull()
        {
            var ab = new Sequance(
                new Character('a'),
                new Character('b'));

            IMatch actual = ab.Match(null);

            Assert.Null(actual.RemainingText());
        }
예제 #9
0
        public void ForNullShouldReturnfalse()
        {
            var ab = new Sequance(
                new Character('a'),
                new Character('b'));

            IMatch actual = ab.Match(null);

            Assert.False(actual.Succes());
        }
예제 #10
0
        public void ForabcdForabShouldReturnTrue()
        {
            var ab = new Sequance(
                new Character('a'),
                new Character('b'));

            IMatch actual = ab.Match("abcd");

            Assert.True(actual.Succes());
        }
예제 #11
0
        public void ForEmptyStringShouldReturnEmptyString()
        {
            var ab = new Sequance(
                new Character('a'),
                new Character('b'));

            IMatch actual = ab.Match("");

            Assert.Equal("", actual.RemainingText());
        }
예제 #12
0
        public void ForEmptyStringShouldReturnFalse()
        {
            var ab = new Sequance(
                new Character('a'),
                new Character('b'));

            IMatch actual = ab.Match("");

            Assert.False(actual.Succes());
        }
예제 #13
0
        public void ForStringdefForabShouldReturndefWhenFalse()
        {
            var ab = new Sequance(
                new Character('a'),
                new Character('b'));

            IMatch actual = ab.Match("def");

            Assert.Equal("def", actual.RemainingText());
        }
예제 #14
0
        public IMatch Match(string myString)
        {
            Choice   alpha      = new Choice(new Range('a', 'z'), new Range('A', 'Z'));
            Range    digit      = new Range('0', '9');
            Choice   unreserved = new Choice(alpha, digit, new Any("-._~"));
            Any      subDelims  = new Any("!$&'()*+,;=");
            Sequance usserInfo  = new Sequance(unreserved, new Many(new Choice(unreserved, subDelims)), new Character(':'));

            return(usserInfo.Match(myString));
        }
예제 #15
0
        public void TestMatch_RemainingText()
        {
            var digit = new Sequance(
                new Character('0'),
                new Character('1'),
                new Range('A', 'E')
                );
            var answear = digit.Match("01AF");

            Assert.Equal("F", answear.RemainingText());
        }
예제 #16
0
        public void For_String_def_For_a_b_Should_Return_def_When_False()
        {
            var ab = new Sequance(
                new Character('a'),
                new Character('b')
                );

            IMatch actual = ab.Match("def");

            Assert.Equal("def", actual.RemainingText());
        }
예제 #17
0
        public void For_def_For_a_b_Should_Return_False()
        {
            var ab = new Sequance(
                new Character('a'),
                new Character('b')
                );

            IMatch actual = ab.Match("def");

            Assert.False(actual.Succes());
        }
예제 #18
0
        public void TestListJsonString(string remainingText)
        {
            var digits     = new OneOrMore(new Ranges('0', '9'));
            var whitespace = new Many(new Any(" \r\n\t"));
            var separator  = new Sequance(whitespace, new Charact(';'), whitespace);
            var list       = new MyList(digits, separator);
            var match      = list.Match("1; 22  ;\n 333 \t; 22");

            Assert.True(match.Success());
            Assert.Equal(remainingText, match.RemainingText());
        }
예제 #19
0
        public void ForStringabcShouldReturnabc()
        {
            var digits     = new OneOrMore(new Range('0', '9'));
            var whitespace = new Many(new Any(" \r\n\t"));
            var separator  = new Sequance(whitespace, new Character(';'), whitespace);
            var list       = new List(digits, separator);

            IMatch actual = list.Match("abc");

            Assert.Equal("abc", actual.RemainingText());
        }
예제 #20
0
        public void ForDigitsSeparatorsNewLineAndTabShouldReturnEmptyString()
        {
            var digits     = new OneOrMore(new Range('0', '9'));
            var whitespace = new Many(new Any(" \r\n\t"));
            var separator  = new Sequance(whitespace, new Character(';'), whitespace);
            var list       = new List(digits, separator);

            IMatch actual = list.Match("1; 22  ;\n 333 \t; 22");

            Assert.Equal(string.Empty, actual.RemainingText());
        }
예제 #21
0
        public void For_Number_And_NewLine_Should_Return_NewLine()
        {
            var digits     = new OneOrMore(new Range('0', '9'));
            var whitespace = new Many(new Any(" \r\n\t"));
            var separator  = new Sequance(whitespace, new Character(';'), whitespace);
            var list       = new List(digits, separator);

            IMatch actual = list.Match("1 \n");

            Assert.Equal(" \n", actual.RemainingText());
            //IMatch actual = list.Match("1; 22  ;\n 333 ");
            //Assert.Equal(string.Empty, actual.RemainingText());
        }
예제 #22
0
        public void For_ax_String_abc_Character_shoud_Return_False_And_ax()
        {
            var ab = new Sequance(
                new Character('a'),
                new Character('b'));

            var abc = new Sequance(
                ab,
                new Character('c'));

            IMatch actual = abc.Match("ax");

            Assert.Equal("ax", actual.RemainingText());
        }
예제 #23
0
        public void For_ax_String_abc_Character_shoud_Return_False()
        {
            var ab = new Sequance(
                new Character('a'),
                new Character('b'));

            var abc = new Sequance(
                ab,
                new Character('c'));

            IMatch actual = abc.Match("ax");

            Assert.False(actual.Succes());
        }
예제 #24
0
        public void ForaxStringabcCharactershoudReturnFalse()
        {
            var ab = new Sequance(
                new Character('a'),
                new Character('b'));

            var abc = new Sequance(
                ab,
                new Character('c'));

            IMatch actual = abc.Match("ax");

            Assert.False(actual.Succes());
        }
예제 #25
0
        public void ForaxStringabcCharactershoudReturnFalseAndax()
        {
            var ab = new Sequance(
                new Character('a'),
                new Character('b'));

            var abc = new Sequance(
                ab,
                new Character('c'));

            IMatch actual = abc.Match("ax");

            Assert.Equal("ax", actual.RemainingText());
        }
예제 #26
0
        public IMatch Match(string myString)
        {
            var unreserved = new Choice(new Range('a', 'z'), new Range('A', 'Z'), new Range('0', '9'), new Any("._~"));
            var subDelims  = new Any("!$&'()*+,;=");

            var pathAbempty  = new OneOrMore(new Sequance(new Character('/'), new OneOrMore(new Pchar())));
            var pathAbsolute = new Sequance(new Character('/'), new OneOrMore(new Sequance(new Pchar(), new OneOrMore(new Sequance(new Character('/'), new OneOrMore(new Pchar()))))));
            var pathNoscheme = new Sequance(new Choice(unreserved, subDelims, new Character('@')), new OneOrMore(new Sequance(new Character('/'), new OneOrMore(new Pchar()))));
            var pathRootless = new Sequance(new Pchar(), new OneOrMore(new Sequance(new Character('/'), new OneOrMore(new Pchar()))));
            var pathEmpty    = new Character('/');
            var path         = new Choice(pathAbempty, pathAbsolute, pathNoscheme, pathRootless, pathEmpty);

            return(path.Match(myString));
        }
예제 #27
0
파일: HttpUri.cs 프로젝트: CadmiPop/Http
        public HttpUri()
        {
            var alpha  = new Choice(new Range('a', 'z'), new Range('A', 'Z'));
            var digit  = new Range('0', '9');
            var scheme = new Sequance(alpha,
                                      new Choice(alpha,
                                                 digit,
                                                 new Any("+-.")));
            var hex         = new Choice(digit, new Range('A', 'F'), new Range('a', 'f'));
            var escaped     = new Sequance(new Character('%'), hex, hex);
            var alphanum    = new Choice(alpha, digit);
            var mark        = new Any("-_.!~*'()");
            var unreserved  = new Choice(alphanum, mark);
            var userinfo    = new Many(new Choice(unreserved, escaped, new Any(";:&=+$,")));
            var IPv4address = new Many(new Many(digit, 1, 3), 4, 4);
            var domainlabel = new Choice(alphanum, new Sequance(alphanum, new Many(new Choice(alphanum, new Character('-'))), alphanum));
            var toplabel    = new Choice(alpha, new Sequance(alpha, new Many(new Choice(alphanum, new Character('-'))), alphanum));
            var hostname    = new Sequance(new Many
                                               (new Sequance(domainlabel, new Character('.'))), toplabel, new Optional(new Character('.')));
            var host     = new Choice(hostname, IPv4address);
            var port     = new Many(digit);
            var hostport = new Sequance(host, new Optional(new Sequance(new Character(';'), port)));
            var server   = new Optional(
                new Sequance(new Optional(new Sequance(userinfo, new Character('@'))),
                             hostport));
            var reg_name      = new Many(new Choice(unreserved, escaped, new Any("$,;:@&=+")));
            var authority     = new Choice(server, reg_name);
            var pchar         = new Choice(unreserved, escaped, new Any(":@&=+$,"));
            var param         = new Many(pchar);
            var segment       = new Sequance(new Many(pchar), new Many(new Sequance(new Character(';'), param)));
            var path_segments = new Sequance(segment, new Many(new Sequance(new Character('/'), segment)));
            var abs_path      = new Sequance(new Character('/'), path_segments);
            var reserved      = new Any(";/?:@&=+$,");
            var uric          = new Choice(reserved, unreserved, escaped);
            var uric_no_slash = new Choice(unreserved, escaped, new Any(";?:@&=+$,"));
            var opaque_part   = new Sequance(uric_no_slash, new Many(uric));
            var path          = new Optional(new Choice(abs_path, opaque_part));
            var query         = new Many(uric);
            var fragment      = new Many(uric);
            var rel_segment   = new OneOrMore(new Choice(unreserved, escaped, new Any(":@&=+$,")));
            var rel_path      = new Sequance(rel_segment, new Optional(abs_path));
            var net_path      = new Sequance(new Text("//"), authority, new Optional(abs_path));
            var hier_part     = new Sequance(new Choice(net_path, abs_path), new Optional(new Sequance(new Character('?'), query)));
            var relativeURI   = new Sequance(new Choice(net_path, abs_path, rel_path), new Optional(new Sequance(new Character('?'), query)));
            var absoluteURI   = new Sequance(scheme, new Character(':'), new Choice(hier_part, opaque_part));

            pattern = new Choice(absoluteURI, relativeURI);
        }
예제 #28
0
파일: SequanceTest.cs 프로젝트: nidarg/JSN
        public void TestSequanceOfCharSuccess(string text, string remaining)
        {
            var ab = new Sequance(
                new Charact('a'),
                new Charact('b')
                );

            var abc = new Sequance(
                ab,
                new Charact('c')
                );


            var match = abc.Match(text);

            Assert.True(match.Success());
            Assert.Equal(remaining, match.RemainingText());
        }
예제 #29
0
        public void For_abc_Should_Return_abc()
        {
            var hex = new Choice(
                new Range('0', '9'),
                new Range('a', 'f'),
                new Range('A', 'F'));

            var hexSeq = new Sequance(
                new Character('u'),
                new Sequance(
                    hex,
                    hex,
                    hex,
                    hex));

            IMatch actual = hexSeq.Match("abc");

            Assert.Equal("abc", actual.RemainingText());
        }
예제 #30
0
        public void For_Null_Hex_Should_Return_Null()
        {
            var hex = new Choice(
                new Range('0', '9'),
                new Range('a', 'f'),
                new Range('A', 'F'));

            var hexSeq = new Sequance(
                new Character('u'),
                new Sequance(
                    hex,
                    hex,
                    hex,
                    hex));

            IMatch actual = hexSeq.Match(null);

            Assert.Null(actual.RemainingText());
        }