public void TestEndOfSource() { var lex = new NewLexer(new StringReader("")); var token = lex.Scan(); Assert.IsNull(token); }
public void TestInteger() { var lex = new NewLexer(new StringReader("123")); var token = lex.Scan(); Assert.AreEqual(token.tag, Tag.INTEGER); }
public void TestIdentifiers() { var lex = new NewLexer(new StringReader("asdf")); var token = lex.Scan(); Assert.AreEqual(token.tag, Tag.IDENTIFIER); }
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); }
//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())); }
public Compiler( ) { parser = new Parser(); lexer = new NewLexer(); }