Esempio n. 1
0
        public void ShouldReadAndSeek()
        {
            ICharReader reader;
            ILexer      lexer;
            Rule        letter, word;
            TokenMatch  tokenMatch;

            reader = new MockedCharReader("abcde");

            word   = new Rule("Word", Parse.Characters("abcdef"));
            letter = new Rule("Letter", Parse.CharacterRange('a', 'z'));

            lexer = new Lexer(word, letter);

            tokenMatch = lexer.Read(reader);
            Assert.AreEqual("Letter", tokenMatch.Token.Class);
            Assert.AreEqual("a", tokenMatch.Token.Value);
            tokenMatch = lexer.Read(reader);
            Assert.AreEqual("Letter", tokenMatch.Token.Class);
            Assert.AreEqual("b", tokenMatch.Token.Value);
            tokenMatch = lexer.Read(reader);
            Assert.AreEqual("Letter", tokenMatch.Token.Class);
            Assert.AreEqual("c", tokenMatch.Token.Value);
            tokenMatch = lexer.Read(reader);
            Assert.AreEqual("Letter", tokenMatch.Token.Class);
            Assert.AreEqual("d", tokenMatch.Token.Value);
            tokenMatch = lexer.Read(reader);
            Assert.AreEqual("Letter", tokenMatch.Token.Class);
            Assert.AreEqual("e", tokenMatch.Token.Value);
        }
Esempio n. 2
0
        public void ShouldConvertToString()
        {
            IPredicate predicate;

            predicate = Parse.Characters("abcd");
            Assert.AreEqual("(abcd)", predicate.ToString());
        }
Esempio n. 3
0
        public void ShouldFailToTryReadWhenInvalidCharAtFirstPosition()
        {
            ICharReader reader;
            ILexer      lexer;
            Rule        word;
            TokenMatch  tokenMatch;

            word = new Rule("Word", Parse.Characters("token"));

            reader = new MockedCharReader("token");
            lexer  = new Lexer(word);

            tokenMatch = lexer.TryRead(reader);
            Assert.IsTrue(tokenMatch.Success);
            Assert.AreEqual("Word", tokenMatch.Token.Class);
            Assert.AreEqual("token", tokenMatch.Token.Value);

            reader = new MockedCharReader(",oken");
            lexer  = new Lexer(word);

            tokenMatch = lexer.TryRead(reader);
            Assert.IsFalse(tokenMatch.Success);
            Assert.IsNull(tokenMatch.Token.Class);
            Assert.AreEqual(",", tokenMatch.Token.Value);
        }
Esempio n. 4
0
        public void ShouldCreateSequencePredicate()
        {
            ISequence predicate;

            predicate = Parse.Characters('a', 'b');
            Assert.IsNotNull(predicate);
            Assert.AreEqual(2, predicate.Items.Count());
            Assert.IsInstanceOfType(predicate.Items.ElementAt(0), typeof(Character));
            Assert.IsInstanceOfType(predicate.Items.ElementAt(1), typeof(Character));

            predicate = Parse.Characters("ab");
            Assert.IsNotNull(predicate);
            Assert.AreEqual(2, predicate.Items.Count());
            Assert.IsInstanceOfType(predicate.Items.ElementAt(0), typeof(Character));
            Assert.IsInstanceOfType(predicate.Items.ElementAt(1), typeof(Character));
        }
        public void ShouldCreateOrPredicateAddingAnyCharacter()
        {
            IOr predicate;

            predicate = Parse.Character('a').OrAnyCharacter();
            Assert.IsNotNull(predicate);
            Assert.AreEqual(2, predicate.Items.Count());
            Assert.IsInstanceOfType(predicate.Items.ElementAt(0), typeof(Character));
            Assert.IsInstanceOfType(predicate.Items.ElementAt(1), typeof(AnyCharacter));

            predicate = Parse.Characters("ab").OrAnyCharacter();
            Assert.IsNotNull(predicate);
            Assert.AreEqual(2, predicate.Items.Count());
            Assert.IsInstanceOfType(predicate.Items.ElementAt(0), typeof(Sequence));
            Assert.IsInstanceOfType(predicate.Items.ElementAt(1), typeof(AnyCharacter));
        }
        public void ShouldCreateSequencePredicateAddingExceptCharacterRange()
        {
            ISequence predicate;

            predicate = Parse.Character('a').ThenExceptCharacterRange('b', 'z');
            Assert.IsNotNull(predicate);
            Assert.AreEqual(2, predicate.Items.Count());
            Assert.IsInstanceOfType(predicate.Items.ElementAt(0), typeof(Character));
            Assert.IsInstanceOfType(predicate.Items.ElementAt(1), typeof(ExceptCharacterRange));

            predicate = Parse.Characters("ab").ThenExceptCharacterRange('c', 'z');
            Assert.IsNotNull(predicate);
            Assert.AreEqual(3, predicate.Items.Count());
            Assert.IsInstanceOfType(predicate.Items.ElementAt(0), typeof(Character));
            Assert.IsInstanceOfType(predicate.Items.ElementAt(1), typeof(Character));
            Assert.IsInstanceOfType(predicate.Items.ElementAt(2), typeof(ExceptCharacterRange));
        }
Esempio n. 7
0
        public void ShouldFailToReadAndThrowEndOfStreamException()
        {
            ICharReader reader;
            ILexer      lexer;
            Rule        word;
            TokenMatch  tokenMatch;


            word = new Rule("Word", Parse.Characters("token"));

            reader = new MockedCharReader("token");
            lexer  = new Lexer(word);

            tokenMatch = lexer.Read(reader);
            Assert.IsTrue(tokenMatch.Success);
            Assert.AreEqual("Word", tokenMatch.Token.Class);
            Assert.AreEqual("token", tokenMatch.Token.Value);

            reader = new MockedCharReader("toke");
            lexer  = new Lexer(word);

            Assert.ThrowsException <EndOfStreamException>(() => tokenMatch = lexer.Read(reader));
        }