public Exp shift_expr()
{
var e = arith_expr();
if (e == null)
return null;
for (; ; )
{
Op op;
switch (lexer.Peek().Type)
{
case TokenType.OP_SHL: lexer.Get(); op = Op.Shl; break;
case TokenType.OP_SHR: lexer.Get(); op = Op.Shr; break;
default: return e;
}
var r = arith_expr();
if (r == null)
Unexpected();
e = new BinExp(op, e, r, filename, e.Start, r.End);
}
}