public Exp term()
{
var e = factor();
if (e == null)
return null;
for (; ; )
{
Op op;
switch (lexer.Peek().Type)
{
case TokenType.OP_STAR: op = Op.Mul; break;
case TokenType.OP_SLASH: op = Op.Div; break;
case TokenType.OP_SLASHSLASH: op = Op.IDiv; break;
case TokenType.OP_PERCENT: op = Op.Mod; break;
default: return e;
}
lexer.Get();
var r = factor();
if (r == null)
Unexpected();
e = new BinExp(op, e, r, filename, e.Start, r.End);
}
}