void Primary(out Expression e) { String name; int n; e = null; if (la.kind == 1) { Ident(out name); e = new VariableAccess(name); } else if (la.kind == 2) { Number(out n); e = new Constant(n, Type.intType); } else if (la.kind == 3) { Get(); Expr(out e); Expect(10); } else { SynErr(40); } }
void PostFixExp(out Expression e) { Expression e1; Expression[] es = new Expression[0]; Primary(out e); if (la.kind == 3 || la.kind == 8) { if (la.kind == 8) { Get(); Expr(out e1); e = new IndexAccess(e, e1); Expect(9); } else { Get(); if (StartOf(4)) { ActualPars(out es); } Expect(10); VariableAccess varAcc = e as VariableAccess; if (varAcc != null) { e = new Call(varAcc.name, es); } else { throw new Exception("Calling non-name expression"); } } } }