void Expr(out Expression e) { Expression rhs; e = null; if (StartOf(2)) { LogOrExp(out e); if (la.kind == 19) { Get(); Expr(out rhs); e = new Assignment(e.MakeLvalue(), rhs); } } else if (la.kind == 20) { Get(); Expr(out e); e = new UnOp(Operator.WriteI, e); } else { SynErr(37); } }
void UnaryExp(out Expression e) { Expression e1; e = null; switch (la.kind) { case 1: case 2: case 3: { PostFixExp(out e); break; } case 29: { Get(); UnaryExp(out e); break; } case 30: { Get(); UnaryExp(out e1); e = new UnOp(Operator.Neg, e1); break; } case 32: { Get(); UnaryExp(out e1); e = new UnOp(Operator.Not, e1); break; } case 18: { Get(); UnaryExp(out e1); e = new DereferenceAccess(e1); break; } case 33: { Get(); UnaryExp(out e1); e = new AddressOf(e1.MakeLvalue()); break; } default: SynErr(39); break; } }