void MulExpr(out NBase res) { res = null; NBase right = null; UnaryExpr(out res); while (la.kind == 35 || la.kind == 36 || la.kind == 37) { if (la.kind == 35) { Get(); UnaryExpr(out right); res = new NBinary(NBinary.NKind.Mul, res, right); } else if (la.kind == 36) { Get(); UnaryExpr(out right); res = new NBinary(NBinary.NKind.Div, res, right); } else { Get(); UnaryExpr(out right); res = new NBinary(NBinary.NKind.Mod, res, right); } } }
void EqlExpr(out NBase res) { res = null; NBase right = null; RelExpr(out res); while (StartOf(2)) { if (la.kind == 15 || la.kind == 16) { if (la.kind == 15) { Get(); } else { Get(); } RelExpr(out right); res = new NBinary(NBinary.NKind.NotEqual, res, right); } else { if (la.kind == 17) { Get(); } else { Get(); } RelExpr(out right); res = new NBinary(NBinary.NKind.Equal, res, right); } } }
void ShiftExpr(out NBase res) { res = null; NBase right = null; AddExpr(out res); while (StartOf(4)) { if (la.kind == 29 || la.kind == 30) { if (la.kind == 29) { Get(); } else { Get(); } AddExpr(out right); res = new NBinary(NBinary.NKind.ShiftLeft, res, right); } else { if (la.kind == 31) { Get(); } else { Get(); } AddExpr(out right); res = new NBinary(NBinary.NKind.ShiftRight, res, right); } } }
void RelExpr(out NBase res) { res = null; NBase right = null; ShiftExpr(out res); while (StartOf(3)) { switch (la.kind) { case 19: case 20: { if (la.kind == 19) { Get(); } else { Get(); } ShiftExpr(out right); res = new NBinary(NBinary.NKind.Less, res, right); break; } case 21: case 22: { if (la.kind == 21) { Get(); } else { Get(); } ShiftExpr(out right); res = new NBinary(NBinary.NKind.Greater, res, right); break; } case 23: case 24: { if (la.kind == 23) { Get(); } else { Get(); } ShiftExpr(out right); res = new NBinary(NBinary.NKind.LessOrEqual, res, right); break; } case 25: case 26: { if (la.kind == 25) { Get(); } else { Get(); } ShiftExpr(out right); res = new NBinary(NBinary.NKind.GreaterOrEqual, res, right); break; } case 27: { Get(); TypeExpr(out right); res = new NCast(NCast.NKind.Is, res, (NType)right); break; } case 28: { Get(); TypeExpr(out right); res = new NCast(NCast.NKind.As, res, (NType)right); break; } } } }
void BitAndExpr(out NBase res) { res = null; NBase right = null; EqlExpr(out res); while (la.kind == 14) { Get(); EqlExpr(out right); res = new NBinary(NBinary.NKind.And, res, right); } }
void BitXorExpr(out NBase res) { res = null; NBase right = null; BitAndExpr(out res); while (la.kind == 13) { Get(); BitAndExpr(out right); res = new NBinary(NBinary.NKind.Xor, res, right); } }
void NullCoalescingExpr(out NBase res) { res = null; NBase right = null; OrExpr(out res); while (la.kind == 7) { Get(); OrExpr(out right); res = new NBinary(NBinary.NKind.Coalesce, res, right); } }
void AndExpr(out NBase res) { res = null; NBase right = null; BitOrExpr(out res); while (la.kind == 10 || la.kind == 11) { if (la.kind == 10) { Get(); } else { Get(); } BitOrExpr(out right); res = new NBinary(NBinary.NKind.AndAlso, res, right); } }
void OrExpr(out NBase res) { res = null; NBase right = null; AndExpr(out res); while (la.kind == 8 || la.kind == 9) { if (la.kind == 8) { Get(); } else { Get(); } AndExpr(out right); res = new NBinary(NBinary.NKind.OrElse, res, right); } }
void AddExpr(out NBase res) { res = null; NBase right = null; MulExpr(out res); while (la.kind == 33 || la.kind == 34) { if (la.kind == 33) { Get(); MulExpr(out right); res = new NBinary(NBinary.NKind.Plus, res, right); } else { Get(); MulExpr(out right); res = new NBinary(NBinary.NKind.Minus, res, right); } } }