static int pexpi (int k) { int ei0, ei1, ei2, ptok; if (lextab[k][0] == 0) return pexp5 (); if ((ei0 = pexpi (k + 1)) == -1) { SUwarning (0, "pexpi", "cannot create first expression"); return -1; } while ((ptok = getop (EEltok, k)) != -1) { if ((ei1 = EEcnew (ptok)) == -1) { SUwarning (0, "pexpi", "cannot create code"); return -1; } EEcsetfp (ei1, ei0); EElgtok (); if ((ei2 = pexpi (k + 1)) == -1) { SUwarning (0, "pexpi", "cannot create next expression"); return -1; } EEcsetnext (ei0, ei2); ei0 = ei1; } return ei0; }
static int pexp5 (void) { int ei0, ei1; if (Ltok == L_MINUS) { ei0 = Cnew (C_UMINUS); Lgtok (); ei1 = pexp5 (); Csetfp (ei0, ei1); return ei0; } return pexp6 (); }
static int pexpi (int k) { int ei0, ei1, ei2, ptok; if (lextab[k][0] == 0) return pexp5 (); ei0 = pexpi (k + 1); while ((ptok = getop (Ltok, k)) != -1) { ei1 = Cnew (ptok); Csetfp (ei1, ei0); Lgtok (); ei2 = pexpi (k + 1); Csetnext (ei0, ei2); ei0 = ei1; } return ei0; }
static int pexp5 (void) { int ei0, ei1; if (EEltok == L_MINUS) { if ((ei0 = EEcnew (C_UMINUS)) == -1) { SUwarning (0, "pexp5", "cannot create code"); return -1; } EElgtok (); if ((ei1 = pexp5 ()) == -1) { SUwarning (0, "pexp5", "cannot create expression"); return -1; } EEcsetfp (ei0, ei1); return ei0; } return pexp6 (); }