easy partiel

This commit is contained in:
2016-02-23 18:02:37 +01:00
parent cd4e0880e5
commit 336d8d58bd
102 changed files with 15322 additions and 10 deletions

View File

@@ -31,16 +31,16 @@ int codeSymbole[] = {
};
char *tableMotsClefs[] = {
"si", "alors", "sinon", "tantque", "faire", "entier", "retour", "lire", "ecrire", '\0'
"si", "alors", "sinon", "tantque", "faire", "entier", "retour", "lire", "ecrire", "pour", '\0'
};
int codeMotClefs[] = {
SI, ALORS, SINON, TANTQUE, FAIRE, ENTIER, RETOUR, LIRE, ECRIRE
SI, ALORS, SINON, TANTQUE, FAIRE, ENTIER, RETOUR, LIRE, ECRIRE, POUR
};
char yytext[YYTEXT_MAX];
int yyleng;
int nbMotsClefs = 9;
int nbMotsClefs = 10;
/* Compter les lignes pour afficher les messages d'erreur avec numero ligne */
int nb_ligne = 1;

View File

@@ -44,11 +44,11 @@ void syntaxErrorMsg( const char * msg )
void programme() {
openSection( __func__ );
if( est_premier( _optDecVariables_, uniteCourante ) || est_premier( _listeDecFonctions_, uniteCourante )) {
if( !est_premier( _optDecVariables_, uniteCourante ) && !est_premier( _listeDecFonctions_, uniteCourante ) && !est_suivant( _listeDecFonctions_, uniteCourante )) {
syntaxError();
} else {
optDecVariables();
listeDecFonctions();
} else if ( !est_suivant( _listeDecFonctions_, uniteCourante ) ) {
syntaxError();
}
closeSection( __func__ );
@@ -234,6 +234,8 @@ void instruction() {
instructionRetour();
} else if( est_premier( _instructionEcriture_, uniteCourante ) ) {
instructionEcriture();
} else if( est_premier( _instructionPour_, uniteCourante ) ) {
instructionPour();
} else if( est_premier( _instructionVide_, uniteCourante ) ) {
instructionVide();
} else {
@@ -447,6 +449,42 @@ void instructionEcriture() {
closeSection( __func__ );
}
void instructionPour() {
openSection( __func__ );
if( uniteCourante == POUR ) {
elementConsome();
uniteCourante = yylex();
instructionAffect();
expression();
if( uniteCourante == POINT_VIRGULE ) {
elementConsome();
uniteCourante = yylex();
instructionAffect();
if( uniteCourante == FAIRE ) {
elementConsome();
uniteCourante = yylex();
instructionBloc();
} else {
syntaxErrorMsg( "'faire' été attendu" );
}
} else {
syntaxErrorMsg( "';' été attendu" );
}
} else {
syntaxErrorMsg( "'pour' été attendu" );
}
closeSection( __func__ );
}
void instructionVide() {
openSection( __func__ );

View File

@@ -44,6 +44,7 @@ void initialise_premiers(void){
premiers[_instruction_][RETOUR] = 1;
premiers[_instruction_][ECRIRE] = 1;
premiers[_instruction_][POINT_VIRGULE] = 1;
premiers[_instruction_][POUR] = 1;
premiers[_instructionAffect_][ID_VAR] = 1;
@@ -58,6 +59,7 @@ void initialise_premiers(void){
premiers[_listeInstructions_][ECRIRE] = 1;
premiers[_listeInstructions_][POINT_VIRGULE] = 1;
premiers[_listeInstructions_][EPSILON] = 1;
premiers[_listeInstructions_][POUR] = 1;
premiers[_instructionSi_][SI] = 1;
@@ -72,6 +74,8 @@ void initialise_premiers(void){
premiers[_instructionEcriture_][ECRIRE] = 1;
premiers[_instructionPour_][POUR] = 1;
premiers[_instructionVide_][POINT_VIRGULE] = 1;
premiers[_expression_][NON] = 1;

View File

@@ -48,6 +48,7 @@ void initialise_suivants(void){
suivants[_instruction_][RETOUR] = 1;
suivants[_instruction_][ECRIRE] = 1;
suivants[_instruction_][POINT_VIRGULE] = 1;
suivants[_instruction_][POUR] = 1;
suivants[_instructionAffect_][ID_VAR] = 1;
suivants[_instructionAffect_][ACCOLADE_FERMANTE] = 1;
@@ -58,6 +59,7 @@ void initialise_suivants(void){
suivants[_instructionAffect_][RETOUR] = 1;
suivants[_instructionAffect_][ECRIRE] = 1;
suivants[_instructionAffect_][POINT_VIRGULE] = 1;
suivants[_instructionAffect_][POUR] = 1;
suivants[_instructionBloc_][FIN] = 1;
suivants[_instructionBloc_][ID_VAR] = 1;
@@ -70,6 +72,7 @@ void initialise_suivants(void){
suivants[_instructionBloc_][ECRIRE] = 1;
suivants[_instructionBloc_][POINT_VIRGULE] = 1;
suivants[_instructionBloc_][SINON] = 1;
suivants[_instructionBloc_][POUR] = 1;
suivants[_listeInstructions_][ACCOLADE_FERMANTE] = 1;
@@ -82,6 +85,7 @@ void initialise_suivants(void){
suivants[_instructionSi_][RETOUR] = 1;
suivants[_instructionSi_][ECRIRE] = 1;
suivants[_instructionSi_][POINT_VIRGULE] = 1;
suivants[_instructionSi_][POUR] = 1;
suivants[_optSinon_][ID_VAR] = 1;
suivants[_optSinon_][ACCOLADE_OUVRANTE] = 1;
@@ -92,6 +96,7 @@ void initialise_suivants(void){
suivants[_optSinon_][RETOUR] = 1;
suivants[_optSinon_][ECRIRE] = 1;
suivants[_optSinon_][POINT_VIRGULE] = 1;
suivants[_optSinon_][POUR] = 1;
suivants[_instructionTantque_][ID_VAR] = 1;
suivants[_instructionTantque_][ACCOLADE_OUVRANTE] = 1;
@@ -102,6 +107,7 @@ void initialise_suivants(void){
suivants[_instructionTantque_][RETOUR] = 1;
suivants[_instructionTantque_][ECRIRE] = 1;
suivants[_instructionTantque_][POINT_VIRGULE] = 1;
suivants[_instructionTantque_][POUR] = 1;
suivants[_instructionAppel_][ID_VAR] = 1;
suivants[_instructionAppel_][ACCOLADE_OUVRANTE] = 1;
@@ -112,6 +118,7 @@ void initialise_suivants(void){
suivants[_instructionAppel_][RETOUR] = 1;
suivants[_instructionAppel_][ECRIRE] = 1;
suivants[_instructionAppel_][POINT_VIRGULE] = 1;
suivants[_instructionAppel_][POUR] = 1;
suivants[_instructionRetour_][ID_VAR] = 1;
suivants[_instructionRetour_][ACCOLADE_OUVRANTE] = 1;
@@ -122,6 +129,7 @@ void initialise_suivants(void){
suivants[_instructionRetour_][RETOUR] = 1;
suivants[_instructionRetour_][ECRIRE] = 1;
suivants[_instructionRetour_][POINT_VIRGULE] = 1;
suivants[_instructionRetour_][POUR] = 1;
suivants[_instructionEcriture_][ID_VAR] = 1;
suivants[_instructionEcriture_][ACCOLADE_OUVRANTE] = 1;
@@ -132,6 +140,18 @@ void initialise_suivants(void){
suivants[_instructionEcriture_][RETOUR] = 1;
suivants[_instructionEcriture_][ECRIRE] = 1;
suivants[_instructionEcriture_][POINT_VIRGULE] = 1;
suivants[_instructionEcriture_][POUR] = 1;
suivants[_instructionPour_][ID_VAR] = 1;
suivants[_instructionPour_][ACCOLADE_OUVRANTE] = 1;
suivants[_instructionPour_][ACCOLADE_FERMANTE] = 1;
suivants[_instructionPour_][SI] = 1;
suivants[_instructionPour_][TANTQUE] = 1;
suivants[_instructionPour_][ID_FCT] = 1;
suivants[_instructionPour_][RETOUR] = 1;
suivants[_instructionPour_][ECRIRE] = 1;
suivants[_instructionPour_][POINT_VIRGULE] = 1;
suivants[_instructionPour_][POUR] = 1;
suivants[_instructionVide_][ID_VAR] = 1;
suivants[_instructionVide_][ACCOLADE_OUVRANTE] = 1;
@@ -142,6 +162,7 @@ void initialise_suivants(void){
suivants[_instructionVide_][RETOUR] = 1;
suivants[_instructionVide_][ECRIRE] = 1;
suivants[_instructionVide_][POINT_VIRGULE] = 1;
suivants[_instructionVide_][POUR] = 1;
suivants[_expression_][POINT_VIRGULE] = 1;
suivants[_expression_][ALORS] = 1;