Ajout vérification appel fonction

This commit is contained in:
2016-03-09 11:11:11 +01:00
parent ef3f2bb998
commit 1a2afe8ed3
3 changed files with 48 additions and 80 deletions

View File

@@ -15,7 +15,7 @@ void affiche_t_instr_affect(n_instr *n);
void affiche_t_instr_appel(n_instr *n);
void affiche_t_instr_retour(n_instr *n);
void affiche_t_instr_ecrire(n_instr *n);
void affiche_t_l_exp(n_l_exp *n);
int affiche_t_l_exp(n_l_exp *n);
void affiche_t_exp(n_exp *n);
void affiche_t_varExp(n_exp *n);
void affiche_t_opExp(n_exp *n);

View File

@@ -77,27 +77,27 @@ void affiche_instr_tantque(n_instr *n)
/*-------------------------------------------------------------------------*/
void affiche_instr_faire(n_instr *n) /* MODIFIE POUR EVAL */
{ /* MODIFIE POUR EVAL */
char *fct = "instr_faire"; /* MODIFIE POUR EVAL */
affiche_balise_ouvrante(fct, trace_abs); /* MODIFIE POUR EVAL */
affiche_instr(n->u.faire_.faire); /* MODIFIE POUR EVAL */
affiche_exp(n->u.faire_.test); /* MODIFIE POUR EVAL */
affiche_balise_fermante(fct, trace_abs); /* MODIFIE POUR EVAL */
} /* MODIFIE POUR EVAL */
void affiche_instr_faire(n_instr *n)
{
char *fct = "instr_faire";
affiche_balise_ouvrante(fct, trace_abs);
affiche_instr(n->u.faire_.faire);
affiche_exp(n->u.faire_.test);
affiche_balise_fermante(fct, trace_abs);
}
/*-------------------------------------------------------------------------*/
void affiche_instr_pour(n_instr *n) /* MODIFIE POUR EVAL */
{ /* MODIFIE POUR EVAL */
char *fct = "instr_pour"; /* MODIFIE POUR EVAL */
affiche_balise_ouvrante(fct, trace_abs); /* MODIFIE POUR EVAL */
affiche_instr(n->u.pour_.init); /* MODIFIE POUR EVAL */
affiche_exp(n->u.pour_.test); /* MODIFIE POUR EVAL */
affiche_instr(n->u.pour_.faire); /* MODIFIE POUR EVAL */
affiche_instr(n->u.pour_.incr); /* MODIFIE POUR EVAL */
affiche_balise_fermante(fct, trace_abs); /* MODIFIE POUR EVAL */
} /* MODIFIE POUR EVAL */
void affiche_instr_pour(n_instr *n)
{
char *fct = "instr_pour";
affiche_balise_ouvrante(fct, trace_abs);
affiche_instr(n->u.pour_.init);
affiche_exp(n->u.pour_.test);
affiche_instr(n->u.pour_.faire);
affiche_instr(n->u.pour_.incr);
affiche_balise_fermante(fct, trace_abs);
}
/*-------------------------------------------------------------------------*/

View File

@@ -13,19 +13,22 @@ extern dico_ dico;
void affiche_t_table(n_prog *n)
{
char *fct = "prog";
affiche_t_l_dec(n->variables);
affiche_t_l_dec(n->fonctions);
int id = rechercheExecutable("main");
if(id < 0 || dico.tab[id].complement != 0) {
printf("Fonction main non trouvé\n");
affiche_dico();
exit(1);
}
}
/*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------*/
void affiche_t_l_instr(n_l_instr *n)
{
char *fct = "l_instr";
if(n){
if(n) {
affiche_t_instr(n->tete);
affiche_t_l_instr(n->queue);
}
@@ -35,7 +38,7 @@ void affiche_t_l_instr(n_l_instr *n)
void affiche_t_instr(n_instr *n)
{
if(n){
if(n) {
if(n->type == blocInst) affiche_t_l_instr(n->u.liste);
else if(n->type == affecteInst) affiche_t_instr_affect(n);
else if(n->type == siInst) affiche_t_instr_si(n);
@@ -52,8 +55,6 @@ void affiche_t_instr(n_instr *n)
void affiche_t_instr_si(n_instr *n)
{
char *fct = "instr_si";
affiche_t_exp(n->u.si_.test);
affiche_t_instr(n->u.si_.alors);
if(n->u.si_.sinon){
@@ -65,8 +66,6 @@ void affiche_t_instr_si(n_instr *n)
void affiche_t_instr_tantque(n_instr *n)
{
char *fct = "instr_tantque";
affiche_t_exp(n->u.tantque_.test);
affiche_t_instr(n->u.tantque_.faire);
}
@@ -75,7 +74,6 @@ void affiche_t_instr_tantque(n_instr *n)
void affiche_t_instr_faire(n_instr *n)
{
char *fct = "instr_faire";
affiche_t_instr(n->u.faire_.faire);
affiche_t_exp(n->u.faire_.test);
}
@@ -84,7 +82,6 @@ void affiche_t_instr_faire(n_instr *n)
void affiche_t_instr_pour(n_instr *n)
{
char *fct = "instr_pour";
affiche_t_instr(n->u.pour_.init);
affiche_t_exp(n->u.pour_.test);
affiche_t_instr(n->u.pour_.faire);
@@ -95,9 +92,6 @@ void affiche_t_instr_pour(n_instr *n)
void affiche_t_instr_affect(n_instr *n)
{
char *fct = "instr_affect";
affiche_t_var(n->u.affecte_.var);
affiche_t_exp(n->u.affecte_.exp);
}
@@ -106,47 +100,50 @@ void affiche_t_instr_affect(n_instr *n)
void affiche_t_instr_appel(n_instr *n)
{
char *fct = "instr_appel";
affiche_t_appel(n->u.appel);
}
/*-------------------------------------------------------------------------*/
void affiche_t_appel(n_appel *n)
{
char *fct = "appel";
//affiche_t_texte( n->fonction, trace_abs);
affiche_t_l_exp(n->args);
int id = rechercheExecutable(n->fonction);
if(id < 0) {
printf("Fonction %s introuvable\n", n->fonction);
affiche_dico();
exit(1);
}
int nbArg = affiche_t_l_exp(n->args);
if(dico.tab[id].complement != nbArg) {
printf("Nombre Argument différent pour l'appel à %s\n", n->fonction);
affiche_dico();
exit(1);
}
}
/*-------------------------------------------------------------------------*/
void affiche_t_instr_retour(n_instr *n)
{
char *fct = "instr_retour";
affiche_t_exp(n->u.retour_.expression);
}
/*-------------------------------------------------------------------------*/
void affiche_t_instr_ecrire(n_instr *n)
{
char *fct = "instr_ecrire";
affiche_t_exp(n->u.ecrire_.expression);
}
/*-------------------------------------------------------------------------*/
void affiche_t_l_exp(n_l_exp *n)
int affiche_t_l_exp(n_l_exp *n)
{
char *fct = "l_exp";
if(n){
affiche_t_exp(n->tete);
affiche_t_l_exp(n->queue);
return 1 + affiche_t_l_exp(n->queue);
}
return 0;
}
/*-------------------------------------------------------------------------*/
@@ -165,31 +162,13 @@ void affiche_t_exp(n_exp *n)
void affiche_t_varExp(n_exp *n)
{
char *fct = "varExp";
affiche_t_var(n->u.var);
}
/*-------------------------------------------------------------------------*/
void affiche_t_opExp(n_exp *n)
{
char *fct = "opExp";
/*if(n->u.opExp_.op == plus) affiche_t_texte("plus", trace_abs);
else if(n->u.opExp_.op == moins) affiche_t_texte("moins", trace_abs);
else if(n->u.opExp_.op == fois) affiche_t_texte("fois", trace_abs);
else if(n->u.opExp_.op == divise) affiche_t_texte("divise", trace_abs);
else if(n->u.opExp_.op == egal) affiche_t_texte("egal", trace_abs);
else if(n->u.opExp_.op == diff) affiche_t_texte("diff", trace_abs);
else if(n->u.opExp_.op == inf) affiche_t_texte("inf", trace_abs);
else if(n->u.opExp_.op == infeg) affiche_t_texte("infeg", trace_abs);
else if(n->u.opExp_.op == ou) affiche_t_texte("ou", trace_abs);
else if(n->u.opExp_.op == et) affiche_t_texte("et", trace_abs);
else if(n->u.opExp_.op == non) affiche_t_texte("non", trace_abs);
if( n->u.opExp_.op1 != NULL ) {
affiche_t_exp(n->u.opExp_.op1);
}
if( n->u.opExp_.op2 != NULL ) {
affiche_t_exp(n->u.opExp_.op2);
}*/
}
/*-------------------------------------------------------------------------*/
@@ -198,21 +177,17 @@ void affiche_t_intExp(n_exp *n)
{
char texte[ 50 ]; // Max. 50 chiffres
sprintf(texte, "%d", n->u.entier);
//affiche_t_element( "intExp", texte, trace_abs );
}
/*-------------------------------------------------------------------------*/
void affiche_t_lireExp(n_exp *n)
{
char *fct = "lireExp";
}
/*-------------------------------------------------------------------------*/
void affiche_t_appelExp(n_exp *n)
{
char *fct = "appelExp";
affiche_t_appel(n->u.appel);
}
@@ -220,8 +195,6 @@ void affiche_t_appelExp(n_exp *n)
void affiche_t_l_dec(n_l_dec *n)
{
char *fct = "l_dec";
if( n ){
affiche_t_dec(n->tete);
affiche_t_l_dec(n->queue);
@@ -250,8 +223,6 @@ void affiche_t_dec(n_dec *n)
void affiche_t_foncDec(n_dec *n)
{
char *fct = "foncDec";
int i = rechercheExecutable(n->nom);
if( i >= 0) {
printf("Fonction %s déjà déclaré\n", n->nom);
@@ -284,7 +255,6 @@ void affiche_t_foncDec(n_dec *n)
void affiche_t_varDec(n_dec *n)
{
//affiche_t_element("varDec", n->nom, trace_abs);
if(rechercheDeclarative(n->nom) >= 0) {
printf("Variable %s déjà déclaré\n", n->nom);
affiche_dico();
@@ -362,8 +332,6 @@ void affiche_t_var_simple(n_var *n)
/*-------------------------------------------------------------------------*/
void affiche_t_var_indicee(n_var *n)
{
char *fct = "var_indicee";
int i = rechercheExecutable(n->nom);
if( i < 0) {
printf("Tableau %s non déclaré\n", n->nom);