예제 #1
0
        public Parser(Lexer lexer)
        {
            if (lexer == null)
                throw new System.ArgumentNullException("lexer");

            this.lexer = lexer;
        }
예제 #2
0
        public void ParseCarriageReturnNewLine()
        {
            Lexer lexer = new Lexer("\r\n");

            Token token = lexer.NextToken();

            Assert.IsNotNull(token);
            Assert.AreEqual(TokenType.EndOfLine, token.TokenType);

            Assert.IsNull(lexer.NextToken());
        }
예제 #3
0
        public void NextIndent()
        {
            Assert.AreEqual(0, (new Lexer("foo")).NextIndent());
            Assert.AreEqual(1, (new Lexer(" foo")).NextIndent());
            Assert.AreEqual(2, (new Lexer("  foo")).NextIndent());

            Lexer lexer = new Lexer("   foo");
            Assert.AreEqual(3, lexer.NextIndent());

            Token token = lexer.NextToken();

            Assert.IsNotNull(token);
            Assert.AreEqual(TokenType.Name, token.TokenType);
            Assert.AreEqual("foo", token.Value);
        }
예제 #4
0
        public void ParseBoolean()
        {
            Lexer lexer = new Lexer("true false");

            Token token;

            token = lexer.NextToken();

            Assert.IsNotNull(token);
            Assert.AreEqual(TokenType.Boolean, token.TokenType);
            Assert.AreEqual("true", token.Value);

            token = lexer.NextToken();

            Assert.IsNotNull(token);
            Assert.AreEqual(TokenType.Boolean, token.TokenType);
            Assert.AreEqual("false", token.Value);

            token = lexer.NextToken();

            Assert.IsNull(token);
        }
예제 #5
0
        public void ParseOneCharOperators()
        {
            string operators = "+-*/=.><";
            Lexer lexer = new Lexer(operators);

            Token token;

            foreach (char ch in operators)
            {
                token = lexer.NextToken();

                Assert.IsNotNull(token);
                Assert.AreEqual(TokenType.Operator, token.TokenType);
                Assert.AreEqual(ch.ToString(), token.Value);
            }

            token = lexer.NextToken();

            Assert.IsNull(token);
        }
예제 #6
0
 public void RaiseIfTextIsNull()
 {
     Lexer lexer = new Lexer((string)null);
 }
예제 #7
0
 public void RaiseIfTextReaderIsNull()
 {
     Lexer lexer = new Lexer((TextReader)null);
 }
예제 #8
0
        public void ParseSeparators()
        {
            string separators = "()[]{},:;";
            Lexer lexer = new Lexer(separators);

            Token token;

            foreach (char ch in separators)
            {
                token = lexer.NextToken();

                Assert.IsNotNull(token);
                Assert.AreEqual(TokenType.Separator, token.TokenType);
                Assert.AreEqual(ch.ToString(), token.Value);
            }

            token = lexer.NextToken();

            Assert.IsNull(token);
        }
예제 #9
0
        public void ParseString()
        {
            Lexer lexer = new Lexer("\"foo\"");

            Token token;

            token = lexer.NextToken();

            Assert.IsNotNull(token);
            Assert.AreEqual(TokenType.String, token.TokenType);
            Assert.AreEqual("foo", token.Value);

            token = lexer.NextToken();

            Assert.IsNull(token);
        }
예제 #10
0
        public void ParseMultiCharOperators()
        {
            string operators = "** <= >= <> == !=";
            string[] otherOperators = new string[] { "**", "<=", ">=", "<>", "==", "!=" };

            Lexer lexer = new Lexer(operators);

            Token token;

            foreach (string op in otherOperators)
            {
                token = lexer.NextToken();

                Assert.IsNotNull(token);
                Assert.AreEqual(TokenType.Operator, token.TokenType);
                Assert.AreEqual(op, token.Value);
            }

            token = lexer.NextToken();

            Assert.IsNull(token);
        }
예제 #11
0
        public void ParseReal()
        {
            Lexer lexer = new Lexer("12.34");

            Token token;

            token = lexer.NextToken();

            Assert.IsNotNull(token);
            Assert.AreEqual(TokenType.Real, token.TokenType);
            Assert.AreEqual("12.34", token.Value);

            token = lexer.NextToken();

            Assert.IsNull(token);
        }
예제 #12
0
        public void CreateWithString()
        {
            Lexer lexer = new Lexer("text");

            Assert.IsNotNull(lexer);
        }
예제 #13
0
        public void ParseIntegerWithSpaces()
        {
            Lexer lexer = new Lexer(" 123 ");

            Token token;

            token = lexer.NextToken();

            Assert.IsNotNull(token);
            Assert.AreEqual(TokenType.Integer, token.TokenType);
            Assert.AreEqual("123", token.Value);

            token = lexer.NextToken();

            Assert.IsNull(token);
        }
예제 #14
0
        public void CreateWithTextReader()
        {
            Lexer lexer = new Lexer(new StringReader("text"));

            Assert.IsNotNull(lexer);
        }
예제 #15
0
        public void ParseNameWithUnderscores()
        {
            Lexer lexer = new Lexer("__init__");

            Token token;

            token = lexer.NextToken();

            Assert.IsNotNull(token);
            Assert.AreEqual(TokenType.Name, token.TokenType);
            Assert.AreEqual("__init__", token.Value);

            token = lexer.NextToken();

            Assert.IsNull(token);
        }
예제 #16
0
        public void ParseNameWithSpaces()
        {
            Lexer lexer = new Lexer(" name ");

            Token token;

            token = lexer.NextToken();

            Assert.IsNotNull(token);
            Assert.AreEqual(TokenType.Name, token.TokenType);
            Assert.AreEqual("name", token.Value);

            token = lexer.NextToken();

            Assert.IsNull(token);
        }
예제 #17
0
        public void ParseNameComment()
        {
            Lexer lexer = new Lexer("name # this is a comment");

            Token token;

            token = lexer.NextToken();

            Assert.IsNotNull(token);
            Assert.AreEqual(TokenType.Name, token.TokenType);
            Assert.AreEqual("name", token.Value);

            token = lexer.NextToken();

            Assert.IsNull(token);
        }
예제 #18
0
        public void ParseMultilineSingleQuotedString()
        {
            Lexer lexer = new Lexer("'''This is a\r\nmulti''line\r\nstring'''");

            var result = lexer.NextToken();

            Assert.IsNotNull(result);
            Assert.AreEqual(TokenType.String, result.TokenType);
            Assert.AreEqual("This is a\r\nmulti''line\r\nstring", result.Value);
            Assert.IsNull(lexer.NextToken());
        }
예제 #19
0
        public void ParseComment()
        {
            Lexer lexer = new Lexer("# this is a comment");

            Token token;

            token = lexer.NextToken();

            Assert.IsNull(token);
        }
예제 #20
0
        public void ParseQuotedStringWithEscapedQuote()
        {
            Lexer lexer = new Lexer("'bar\\''");

            Token token;

            token = lexer.NextToken();

            Assert.IsNotNull(token);
            Assert.AreEqual(TokenType.String, token.TokenType);
            Assert.AreEqual("bar'", token.Value);

            token = lexer.NextToken();

            Assert.IsNull(token);
        }