diff --git a/src/analyseur_syntaxyque.c b/src/analyseur_syntaxyque.c index 0e3fd0e..96b7c87 100644 --- a/src/analyseur_syntaxyque.c +++ b/src/analyseur_syntaxyque.c @@ -3,20 +3,6 @@ int uniteCourante; extern char yytext[100]; -void ou(void); -void ouBis(void); -void et(void); -void etBis(void); -void non(void); -void nonBis(void); -void egal(void); -void egalBis(void); -void expArith(void); -void expArithBis(void); -void terme(void); -void termeBis(void); -void facteur(void); - void ou (void){ affiche_balise_ouvrante("ou", 1); @@ -61,23 +47,21 @@ void etBis(void){ void non(void){ affiche_balise_ouvrante("non", 1); - - egal(); nonBis(); + egal(); affiche_balise_fermante("non", 1); } void nonBis(void){ - affiche_balise_ouvrante("etBis", 1); - + affiche_balise_ouvrante("nonBis", 1); if(uniteCourante == NON){ uniteCourante = yylex(); affiche_xml_texte(yytext); - non(); + nonBis(); } - affiche_balise_fermante("etBis", 1); + affiche_balise_fermante("nonBis", 1); } void egal(void){ @@ -92,7 +76,7 @@ void egal(void){ void egalBis(void){ affiche_balise_ouvrante("egalBis", 1); - if(uniteCourante == NON){ + if(uniteCourante == EGAL || uniteCourante == INFERIEUR){ uniteCourante = yylex(); affiche_xml_texte(yytext); egal(); @@ -178,7 +162,39 @@ void facteur (void) { } uniteCourante = yylex(); affiche_xml_texte(yytext); - } + + } + else if(uniteCourante == ID_FCT){ + uniteCourante = yylex(); + affiche_xml_texte(yytext); + if(uniteCourante != PARENTHESE_OUVRANTE){ + printf("Erreur de syntaxe"); + exit(-1); + } + uniteCourante = yylex(); + affiche_xml_texte(yytext); + if(uniteCourante != PARENTHESE_FERMANTE){ + ou(); + while(uniteCourante == VIRGULE){ + uniteCourante = yylex(); + affiche_xml_texte(yytext); + ou(); + + } + } + if(uniteCourante != PARENTHESE_FERMANTE){ + printf("Erreur de syntaxe"); + exit(-1); + } + uniteCourante = yylex(); + affiche_xml_texte(yytext); + if(uniteCourante != POINT_VIRGULE){ + printf("Erreur de syntaxe"); + exit(-1); + } + uniteCourante = yylex(); + affiche_xml_texte(yytext); + } else { printf("Erreur de syntaxe"); exit(-1); diff --git a/test/expressionNonNoninferieur b/test/expressionNonNoninferieur index 3429cb3..9635fc7 100644 --- a/test/expressionNonNoninferieur +++ b/test/expressionNonNoninferieur @@ -1 +1 @@ -(!!!var & var) | (10 -4) & 10 < (5/3) \ No newline at end of file +(!!!$var & $var) | (10 -4) & 10 < (5/3) \ No newline at end of file diff --git a/test/expressionfctargument b/test/expressionfctargument new file mode 100644 index 0000000..4f13932 --- /dev/null +++ b/test/expressionfctargument @@ -0,0 +1 @@ +expression(1,10); \ No newline at end of file diff --git a/test/expressionfctsimple b/test/expressionfctsimple new file mode 100644 index 0000000..03fed7a --- /dev/null +++ b/test/expressionfctsimple @@ -0,0 +1 @@ +test(); \ No newline at end of file