#include static int symboleAvance; void E(void); void A(void); void T(void); void U(void); void F(void); void consommer(char c); void erreurSyntaxique(){ printf("erreurSyntaxique \n"); } void S(void){ switch (symboleAvance){ case 'x': case '(': E(); consommer('$'); break; default : erreurSyntaxique(); break; } } void E(void){ switch (symboleAvance){ case 'x': case '(': T(); A(); break; default : erreurSyntaxique(); break; } } void A(void){ switch (symboleAvance){ case '+': consommer('+'); T(); A(); break; case ')': case '$': break; default : erreurSyntaxique(); break; } } void T(void){ switch (symboleAvance){ case 'x': case '(': F(); U(); break; default : erreurSyntaxique(); break; } } void U(void){ switch (symboleAvance){ case '+': break; case '*': consommer('*'); F(); U(); break; case ')': case '$': break; default : erreurSyntaxique(); break; } } void F(void){ switch (symboleAvance){ case 'x': consommer('x'); break; case '(': consommer('('); E(); consommer(')'); break; default : erreurSyntaxique(); break; } } void consommer(char c){ if (symboleAvance == '$') return; if (symboleAvance == c ) symboleAvance = yylex(); else erreurSyntaxique(); } int main() { symboleAvance = yylex(); S(); printf("OK \n"); } int yylex() { int ch; while ((ch = getchar()) == '\n'); return ch; }