#include #include #include #include int next; // Următorul caracter de pe bandă // Servește caracterul deja citit în next și îl pregătește în next pe următorul int consume() { int result = next; do { next = getchar(); } while (isspace(next)); return result; } int E(); int F() { int r; if (isdigit(next)) { r = 0; do { r = r * 10 + (consume() - '0'); } while (isdigit(next)); } else if (next == '(') { consume(); r = E(); assert(consume() == ')'); } else { printf("Caracter incorect: %c\n", next); exit(1); } // printf("F returnează %d\n", r); return r; } int T() { int r = F(); while (next == '*' || next == '/') { if (consume() == '*') { r *= F(); } else { r /= F(); } } // printf("T returnează %d\n", r); return r; } int E() { int r = T(); while (next == '+' || next == '-') { if (consume() == '+') { r += E(); } else { r -= E(); } } // printf("E returnează %d\n", r); return r; } int main(void) { consume(); // bagă primul caracter pe țeavă printf("%d\n", E()); if (next != EOF) { printf("... dar expresia este prea lungă\n"); } }