コード例 #1
0
        public void OneOrMore_should_not_match(string text)
        {
            // arrange
            var buffer = text.ToSinglyLinked();

            // act
            var(isMatch, start, end) = OneOrMore(Space())(buffer);
            // assert
            isMatch.ShouldBeFalse();
            start.ShouldBe(end);
        }
コード例 #2
0
        public void OneOrMore_should_match(string text)
        {
            // arrange
            var buffer = text.ToSinglyLinked();

            // act
            var(isMatch, start, end) = OneOrMore(Space())(buffer);
            // assert
            isMatch.ShouldBeTrue();
            start.Head.ShouldBe(' ');
            end.ShouldBeNull();
        }
コード例 #3
0
        private static ParseResult Match_Namespace(InputStream input)
        {
            var         ids    = new List <string>();
            ParseResult result = OneOrMore(
                WithAction(Sequence(Match_Id, Match_Dot),
                           r => ids.Add(new SequenceResult(r)[0].MatchedString)))(input);

            if (result.Matched)
            {
                var ns = string.Join(".", ids.ToArray());
                return(new ParseResult(result.MatchedString, ns));
            }

            return(result);
        }
コード例 #4
0
        public override void VisitLeave(OneOrMore expression)
        {
            IsMatchPredicate local = _matchStack.Pop();

            _matchStack.Push(
                delegate(IInputIterator iterator)
            {
                Int32 cnt          = 0;
                Int32 savePosition = iterator.Index;
                while (local(iterator))
                {
                    cnt++;
                    if (savePosition == iterator.Index)
                    {
                        //InfiniteLoopDetectedException
                        break;
                    }
                    savePosition = iterator.Index;
                }

                iterator.Index = savePosition;

                return(cnt > 0);
            }
                );
        }
コード例 #5
0
        public void WhenNoCharacterIsConsumedShouldReturnInitialText()
        {
            var    a      = new OneOrMore(new Character('a'));
            IMatch actual = a.Match("bc");

            Assert.Equal("bc", actual.RemainingText());
        }
コード例 #6
0
ファイル: Number.cs プロジェクト: flavius-ft/ClassRange
        public Number()
        {
            var minus = new Character('-');
            var zero  = new Character('0');

            var digit   = new Range('0', '9');
            var digits  = new OneOrMore(digit);
            var point   = new Sequence(new Character('.'), digits);
            var natural = new Choice(
                zero,
                digits);
            var integer = new Sequence(
                new Optional(minus),
                natural);
            var exponent = new Sequence(
                new Any("eE"),
                new Optional(new Any("+-")),
                digits);
            var fractional = new Sequence(
                point,
                new Optional(exponent));

            pattern = new Sequence(
                integer,
                new Optional(fractional),
                new Optional(exponent));
        }
コード例 #7
0
        public void For_aabac_Should_Return_True()
        {
            var    a      = new OneOrMore(new Character('a'));
            IMatch actual = a.Match("aabac");

            Assert.True(actual.Succes());
        }
コード例 #8
0
        public void Should_Return_False_When_No_Character_Is_Consumed()
        {
            var    a      = new OneOrMore(new Character('a'));
            IMatch actual = a.Match("bc");

            Assert.False(actual.Succes());
        }
コード例 #9
0
        public void Should_Consume_More_Characters_From_String()
        {
            var    a      = new OneOrMore(new Character('a'));
            IMatch actual = a.Match("aaabc");

            Assert.True(actual.Succes());
        }
コード例 #10
0
        public void FirstNumberMatchesRangeOfDigits()
        {
            OneOrMore pattern = new OneOrMore(new Range('0', '9'));

            Assert.True(pattern.Match("12345ab123").Success());
            Assert.True(pattern.Match("12345ab123").RemainingText() == "ab123");
        }
コード例 #11
0
        public void FirstCharacterMatchesCharacter()
        {
            OneOrMore pattern = new OneOrMore(new Character('a'));

            Assert.True(pattern.Match("abc").Success());
            Assert.True(pattern.Match("abc").RemainingText() == "bc");
        }
コード例 #12
0
        public void FirstCharacterAndSpaceMatchCharacter()
        {
            OneOrMore pattern = new OneOrMore(new Character('a'));

            Assert.True(pattern.Match("a ").Success());
            Assert.True(pattern.Match("a ").RemainingText() == " ");
        }
コード例 #13
0
        public void EmptyStringMatchesCharacter()
        {
            OneOrMore pattern = new OneOrMore(new Character('a'));

            Assert.False(pattern.Match("").Success());
            Assert.True(pattern.Match("").RemainingText() == "");
        }
コード例 #14
0
        public void MultipleFirstCharacterMatchManyTextPattern()
        {
            OneOrMore pattern = new OneOrMore(new Text("abc"));

            Assert.True(pattern.Match("abcabcd").Success());
            Assert.True(pattern.Match("abcabcd").RemainingText() == "d");
        }
コード例 #15
0
        public void NumberAndCharacterMatchesRangeOfDigits()
        {
            OneOrMore pattern = new OneOrMore(new Range('0', '9'));

            Assert.True(pattern.Match("123ab").Success());
            Assert.True(pattern.Match("123ab").RemainingText() == "ab");
        }
コード例 #16
0
        public void PatterDontMatch()
        {
            OneOrMore x = new OneOrMore(new Range('0', '9'));

            Assert.False(x.Match("ab").Success());
            Assert.Equal("ab", x.Match("0ab").RemainingText());
        }
コード例 #17
0
        public void LettersMatchRangeOfDigits()
        {
            OneOrMore pattern = new OneOrMore(new Range('0', '9'));

            Assert.False(pattern.Match("bc").Success());
            Assert.True(pattern.Match("bc").RemainingText() == "bc");
        }
コード例 #18
0
        public void Should_Consume_More_Characters_From_String_With_RemainingTest_bc()
        {
            var    a      = new OneOrMore(new Character('a'));
            IMatch actual = a.Match("aaabc");

            Assert.Equal("bc", actual.RemainingText());
        }
コード例 #19
0
        public void NullDoesNotMatchRangeOfDigits()
        {
            OneOrMore pattern = new OneOrMore(new Range('0', '9'));

            Assert.False(pattern.Match(null).Success());
            Assert.True(pattern.Match(null).RemainingText() == null);
        }
コード例 #20
0
        public void When_No_Character_Is_Consumed_Should_Return_Initial_Text()
        {
            var    a      = new OneOrMore(new Character('a'));
            IMatch actual = a.Match("bc");

            Assert.Equal("bc", actual.RemainingText());
        }
コード例 #21
0
        public void ShouldConsumeMoreCharactersFromStringWithRemainingTestbc()
        {
            var    a      = new OneOrMore(new Character('a'));
            IMatch actual = a.Match("aaabc");

            Assert.Equal("bc", actual.RemainingText());
        }
コード例 #22
0
        public void For_aabac_Should_Return_bac()
        {
            var    a      = new OneOrMore(new Character('a'));
            IMatch actual = a.Match("aabac");

            Assert.Equal("bac", actual.RemainingText());
        }
コード例 #23
0
        public void ShouldReturnFalseWhenNoCharacterIsConsumed()
        {
            var    a      = new OneOrMore(new Character('a'));
            IMatch actual = a.Match("bc");

            Assert.False(actual.Succes());
        }
コード例 #24
0
        public void ShouldConsumeTheFirstCharacterFromString()
        {
            var    a      = new OneOrMore(new Character('a'));
            IMatch actual = a.Match("abc");

            Assert.True(actual.Succes());
        }
コード例 #25
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);
        }
コード例 #26
0
ファイル: RegName.cs プロジェクト: RazvanBota/HttpServer
        public IMatch Match(string myString)
        {
            var unreserved = new Choice(new Choice(new Range('a', 'z'), new Range('A', 'Z')), new Range('0', '9'), new Any("-._~"));
            var subDelims  = new Any("!$&'()*+,;=");
            var reg        = new OneOrMore(new Choice(unreserved, subDelims));

            return(reg.Match(myString));
        }
コード例 #27
0
        public void ReturnsFalseAndEmptyForEmptyString()
        {
            var a = new OneOrMore(
                new Range('0', '9'));

            Assert.False(a.Match("").Success());
            Assert.Equal("", a.Match("").RemainingText());
        }
コード例 #28
0
        public void AllPatternMatch()
        {
            OneOrMore x     = new OneOrMore(new Range('0', '9'));
            var       match = x.Match("123");

            Assert.True(match.Success());
            Assert.Equal("", match.RemainingText());
        }
コード例 #29
0
        public void ReturnsTrueAndRemainingForTwoMatchesString()
        {
            var a = new OneOrMore(
                new Range('0', '9'));

            Assert.True(a.Match("12a").Success());
            Assert.Equal("a", a.Match("12a").RemainingText());
        }
コード例 #30
0
        public void ReturnsFalseAndTextForNoMatchesString()
        {
            var a = new OneOrMore(
                new Range('0', '9'));

            Assert.False(a.Match("bc").Success());
            Assert.Equal("bc", a.Match("bc").RemainingText());
        }
コード例 #31
0
ファイル: OneOrMoreTest.cs プロジェクト: naucera/iambic
        public void ShouldConvertToGrammarString()
        {
            var expr = new OneOrMore(new LiteralTerminal("a"));

            Assert.Equal("'a'+", expr.ToString());
        }