Пример #1
0
 public Lexer(PushBackCharacterStream inputText)
 {
     _source = inputText;
 }
Пример #2
0
        public void ShouldReturnTwoSymbolsSeparatedByWhitespace()
        {
            var stream = new PushBackCharacterStream(new StringReader("symbol1 symbol2"));
            Lexer lexer = new Lexer(stream);
            Token token = lexer.Next();
            Assert.AreEqual(TokenType.Symbol, token.Type);
            Assert.AreEqual("symbol1", token.Text);

            token = lexer.Next();
            Assert.AreEqual(TokenType.Whitespace, token.Type);

            token = lexer.Next();
            Assert.AreEqual(TokenType.Symbol, token.Type);
            Assert.AreEqual("symbol2", token.Text);
        }
Пример #3
0
        public void ShouldStopParsingSymbolWhenDoubleQuoteFound()
        {
            var stream = new PushBackCharacterStream(new StringReader("asdf\"str\""));
            Lexer lexer = new Lexer(stream);
            Token token = lexer.Next();
            Assert.AreEqual(TokenType.Symbol, token.Type);
            Assert.AreEqual("asdf", token.Text);

            token = lexer.Next();
            Assert.AreEqual(TokenType.String, token.Type);
            Assert.AreEqual("\"str\"", token.Text);
        }
Пример #4
0
        public void ShouldReturnSymbolImmediatelyFollowedByComment()
        {
            var stream = new PushBackCharacterStream(new StringReader("test;comment"));
            Lexer lexer = new Lexer(stream);
            Token token = lexer.Next();
            Assert.AreEqual(TokenType.Symbol, token.Type);
            Assert.AreEqual("test", token.Text);

            token = lexer.Next();
            Assert.AreEqual(TokenType.Comment, token.Type);
            Assert.AreEqual(";comment", token.Text);
        }
Пример #5
0
 public void ShouldReturnSymbolWhenItHasADot()
 {
     var stream = new PushBackCharacterStream(new StringReader("namespace.test"));
     Lexer lexer = new Lexer(stream);
     Token token = lexer.Next();
     Assert.AreEqual(TokenType.Symbol, token.Type);
     Assert.AreEqual("namespace.test", token.Text);
 }
Пример #6
0
 public void ShouldReturnNumberTokenTypeWhenInputIsNumber()
 {
     var stream = new PushBackCharacterStream(new StringReader("123"));
     Lexer lexer = new Lexer(stream);
     Token token = lexer.Next();
     Assert.AreEqual(TokenType.Number, token.Type);
     Assert.AreEqual("123", token.Text);
     Assert.IsFalse(stream.HasMore);
 }
Пример #7
0
 public void ShouldReturnRealNumber()
 {
     var stream = new PushBackCharacterStream(new StringReader("123.321"));
     Lexer lexer = new Lexer(stream);
     Token token = lexer.Next();
     Assert.AreEqual(TokenType.Number, token.Type);
     Assert.AreEqual("123.321", token.Text);
 }
Пример #8
0
 public void ShouldReturnNil()
 {
     var stream = new PushBackCharacterStream(new StringReader("nil"));
     Lexer lexer = new Lexer(stream);
     Token token = lexer.Next();
     Assert.AreEqual(TokenType.Nil, token.Type);
     Assert.AreEqual("nil", token.Text);
     Assert.IsFalse(stream.HasMore);
 }
Пример #9
0
        public void ShouldReturnNumberFollowByWhitespaceAndAString()
        {
            var stream = new PushBackCharacterStream(new StringReader("123 \"asdf\""));
            Lexer lexer = new Lexer(stream);
            Token token = lexer.Next();
            Assert.AreEqual(TokenType.Number, token.Type);
            Assert.AreEqual("123", token.Text);
            Assert.AreEqual(0, token.StartIndex);

            token = lexer.Next();
            Assert.AreEqual(TokenType.Whitespace, token.Type);
            Assert.AreEqual(" ", token.Text);
            Assert.AreEqual(3, token.StartIndex);

            token = lexer.Next();
            Assert.AreEqual(TokenType.String, token.Type);
            Assert.AreEqual("\"asdf\"", token.Text);
            Assert.AreEqual(4, token.StartIndex);
        }
Пример #10
0
 public void ShouldReturnKeywordWithNoName()
 {
     var stream = new PushBackCharacterStream(new StringReader(":"));
     Lexer lexer = new Lexer(stream);
     Token token = lexer.Next();
     Assert.AreEqual(TokenType.Keyword, token.Type);
     Assert.AreEqual(":", token.Text);
 }
Пример #11
0
 public void ShouldReturnKeywordFollowByListStart()
 {
     var stream = new PushBackCharacterStream(new StringReader(":asdf("));
     Lexer lexer = new Lexer(stream);
     Token token = lexer.Next();
     Assert.AreEqual(TokenType.Keyword, token.Type);
     Assert.AreEqual(":asdf", token.Text);
     Assert.AreEqual(TokenType.ListStart, lexer.Next().Type);
 }
Пример #12
0
        public void ShouldReturnCommentWithTrailingWhitespace()
        {
            var stream = new PushBackCharacterStream(new StringReader("; test text  \r\n"));
            Lexer lexer = new Lexer(stream);
            Token token = lexer.Next();
            Assert.AreEqual(TokenType.Comment, token.Type);
            Assert.AreEqual("; test text  ", token.Text);

            token = lexer.Next();
            Assert.AreEqual(TokenType.Whitespace, token.Type);
            Assert.AreEqual("\r\n", token.Text);
        }
Пример #13
0
 public void ShouldReturnCommentToEndOfLineOnly()
 {
     var stream = new PushBackCharacterStream(new StringReader("; test\r\n123"));
     Lexer lexer = new Lexer(stream);
     Token token = lexer.Next();
     Assert.AreEqual(TokenType.Comment, token.Type);
     Assert.AreEqual("; test", token.Text);
 }
Пример #14
0
 public void ShouldReturnBooleanWhenTrueIsInput()
 {
     var stream = new PushBackCharacterStream(new StringReader("true"));
     Lexer lexer = new Lexer(stream);
     Token token = lexer.Next();
     Assert.AreEqual(TokenType.Boolean, token.Type);
     Assert.AreEqual("true", token.Text);
     Assert.IsFalse(stream.HasMore);
 }