Exemplo n.º 1
0
        public void TestEndOfSource()
        {
            var lex   = new NewLexer(new StringReader(""));
            var token = lex.Scan();

            Assert.IsNull(token);
        }
Exemplo n.º 2
0
        public void TestInteger()
        {
            var lex   = new NewLexer(new StringReader("123"));
            var token = lex.Scan();

            Assert.AreEqual(token.tag, Tag.INTEGER);
        }
Exemplo n.º 3
0
        public void TestIdentifiers()
        {
            var lex   = new NewLexer(new StringReader("asdf"));
            var token = lex.Scan();

            Assert.AreEqual(token.tag, Tag.IDENTIFIER);
        }
Exemplo n.º 4
0
        public void TestReservedWords()
        {
            var lex   = new NewLexer(new StringReader("true"));
            var token = lex.Scan();

            Assert.AreEqual(token.tag, Tag.TRUE);
            lex   = new NewLexer(new StringReader("false"));
            token = lex.Scan();
            Assert.AreEqual(token.tag, Tag.FALSE);
        }
Exemplo n.º 5
0
        //this parser work from left to right

        /*
         * the logging system use 'branches' for hierarchy
         */


        /*
         * NOTES ABOUT OPERATOR PRECEDENCE & ASSOCIATIVITY :
         *
         * --> PRECEDENCE (functions order) :
         * + -
         * * / %
         * + - [as unary]
         * %
         * number, identifiers and parentheses
         *
         * --> ASSOCIATIVITY (parsing by loop or by recursion) :
         *
         * + - * / % are left-associative operators
         * ^ is right-associative operator
         *
         */

        public Result <Expression> Parse(NewLexer lexer)
        {
            errors.Clear();

            this.lexer = lexer;

            var final = ParseTerms();

            Expect(Token.EOF);


            return(new Result <Expression>(final, errors.Concat(this.lexer.Errors).ToList()));
        }
Exemplo n.º 6
0
 public Compiler( )
 {
     parser = new Parser();
     lexer  = new NewLexer();
 }