private Exp ParseExp() { var term = ParseFactor(); while (PeekAndDiscard(TokenType.Minus)) { var term2 = ParseFactor(); term = new BinExp(TokenType.Minus, term, term2); } return(term); }
public Exp ParseExp() { var term = ParseTerm(); for (; ;) { var type = lexer.Peek().Type; switch (type) { case TokenType.Plus: break; case TokenType.Minus: break; default: return(term); } lexer.Read(); var term2 = ParseTerm(); term = new BinExp(type, term, term2); } }
private Exp ParseTerm() { var factor = ParseFactor(); for (; ;) { var opType = lexer.Peek().Type; switch (opType) { case TokenType.Star: case TokenType.Slash: break; default: return(factor); } lexer.Read(); var factor2 = ParseFactor(); factor = new BinExp(opType, factor, factor2); } }