int E (char *cadena, int i) { if (i<0) return i; switch (cadena[i]) { case 'i': push(id); i++; i = V (cadena, i); break; case '(': i++; i = E (cadena, i); i = C (cadena, i); i = V (cadena, i); break; default: return -1; } return i; } int X (char *cadena, int i) { if (i<0) return i; switch (cadena[i]) { case '+': case '-': j = i; i++; i = E (cadena, i); push(cadena[j]); break; } return i; } int V (char *cadena, int i) { if (i<0) return i; switch (cadena[i]) { case '*': case '/': j = i; i++; i = T (cadena, i); push(cadena[j]); i = X (cadena, i); break; case '+': case '-': j = i; i++; i = E (cadena, i); push(cadena[j]); break; } return i; } int T (char *cadena, int i) { if (i<0) return i; switch (cadena[i]) { case 'i': push(id); i++; i = U (cadena, i); break; case '(': i++; i = E (cadena, i); i = C (cadena, i); i = U (cadena, i); break; default: return -2; } return i; } 1 int U (char *cadena, int i) { if (i<0) return i; switch (cadena[i]) { case '*': case '/': j = i; i++; i = T (cadena, i); push(cadena[j]); break; } return i; } int F (char *cadena, int i) { if (i<0) return i; switch (cadena[i]) { case 'i': push(id); i++; break; case '(': i++; i = E (cadena, i); i = C (cadena, i); break; default: return -3; } return i; } int C (char *cadena, int i) { if (i<0) return i; switch (cadena[i]) { case ')': i++; break; default: return -4; } return i; } 2