protected internal override void Parse(Lexer lexer, List <ASTree> res) { Token t = lexer.Read(); if (t.IsIdentifier) { foreach (String token in tokens) { if (token.Equals(t.Text)) { Find(res, t); return; } } } if (tokens.Length > 0) { throw new ParseException(tokens[0] + " expected.", t); } else { throw new ParseException(t); } }
public void Start() { var s = File.ReadAllText("in.txt"); //var s = Console.ReadLine(); LineNumberReader reader = new LineNumberReader(s); Lexer l = new Lexer(reader); for (Token t; (t = l.Read()) != Token.EOF;) { Console.WriteLine("=> " + t.Text); } }
protected internal override void Parse(Lexer lexer, List <ASTree> res) { Token t = lexer.Read(); if (Test(t)) { ASTree leaf = factory.Make(t); res.Add(leaf); } else { throw new ParseException(t); } }
private ASTree doShift(Lexer lexer, ASTree left, int prec) { ArrayList <ASTree> list = new ArrayList <ASTree>(); list.Add(left); list.Add(new ASTLeaf(lexer.Read())); ASTree right = factor.Parse(lexer); Precedence next; while ((next = nextOperator(lexer)) != null && rightIsExpr(prec, next)) { right = doShift(lexer, right, next.value); } list.Add(right); return(factory.Make(list)); }