Bonjour a tous,
voila je dois faire un petit analyseur syntaxique,
en ce moment j'en suis au prémice de mon code
et j'ai dejà un Big problem d'affichage au niveau
de ma liste doublement chainées du moins c ce ke je pense.
voilà mon code ci-dessous.
#include <stdio.h>
#include <conio.h>
#include <ctype.h>
#include <stdlib.h>
#include "analyseur.h"
/* fonction permettant de rajouter un */
/* un non-terminal a la liste */
int encore(void) /* demande si on en veut encore */
{
printf("\tContinuer (O/N)\n");
printf("\tChoix:");
return(toupper(getche())=='O');
printf("\n\n");
}
void lecture(void)
{
struct symbol *precedent, *nouveau;
//on initialise le pointeur de tete
premier=(struct symbol*)malloc(sizeof(struct symbol));
printf("\tEntrer Le Non-Terminal\n");
printf("\t:");
scanf("%c",&premier->a);
printf("\n");
precedent=premier;
lecture2();
system("CLS");
while (encore2())
{
nouveau=(struct symbol *)malloc(sizeof(struct symbol));
precedent->suivant = nouveau;
precedent = nouveau;
system("CLS");
printf("\n\tSaisissez un autre non-terminal\t\n");
printf("\t:");
scanf("%s",&nouveau->a);
printf("\n");
lecture2();
}
precedent->suivant = NULL;
}
void affiche(struct symbol *debut, struct expression *debutz)
{
system("CLS");
printf("\nSoit la grammaire\n");
while( (debut != NULL) || (debutz != NULL) )
{
printf("\n\t\t\t%c -> %s ", debut->a, debutz->tab);
debut = debut->suivant;
debutz = debutz->suiv;
}
printf("\n\n");
}
**************************************
#include <stdio.h>
#include <conio.h>
#include <ctype.h>
#include <stdlib.h>
#include "analyseur.h"
//liste chainées comprenant la
//grammaire proprement dite
int encore2(void) /* demande si on en veut encore */
{
system("CLS");
printf("\n\tSaisir un autre Non-Terminal(O/N)\n");
printf("\tChoix:");
return(toupper(getche())=='O');
printf("\n\n");
}
void lecture2(void)
{
struct expression *prec, *nouv;
//on initialise le pointeur de tete
prem=(struct expression*)malloc(sizeof(struct expression));
printf("\tSaisissez votre expression\n");
printf("\t:");
scanf("%s",&prem->tab);
printf("\n");
prec=prem;
while (encore())
{
nouv=(struct expression *)malloc(sizeof(struct expression));
prec->suiv = nouv;
prec = nouv;
system("CLS");
printf("\n\tSaisissez un autre terme\t\n");
printf("\t:");
scanf("%s",&nouv->tab);
printf("\n");
}
prec->suiv = NULL;
}
/*void affiche2(struct expression *debutz)
{
system("CLS");
printf("\n");
while(debutz != NULL)
{
printf("\n\t\t\t%c->\n", debutz->tab);
debutz = debutz->suiv;
}
printf("\n\n");
}*/
******************Header**************************
/* fichier d'entête */
#include <stdio.h>
/* structure de la premiere liste chainée */
/* contenant uniquement les non-terminaux */
struct symbol
{
char a ;
char first[30];
char follow[30];
struct *suivant;
struct *prem;
};
/* structure comprenant les expressions correspondant */
/* au non-terminaux */
struct expression
{
char tab[30];
struct *suiv;
};
//je declare un pointeur de type symbole
struct symbol *premier;
//je declare un poiteur de type expression
struct expression *prem;
//prototype des fonctions
int encore(void);
int encore2(void);
void lecture(void);
void lecture2(void);
void affiche(struct symbol *debut, struct expression *debutz);
******************Main************************
/* Fonction Principale */
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include "analyseur.h"
void main(void)
{
printf("Dominici Pierre-Francois\nFaivre Thomas\n");
printf("\n\t\t\t Analyseur Syntaxique\n");
printf("\n\n\t\t -!- Attention votre grammaire -!- ");
printf("\n\t-!- ne dois pas comporter de recursiviter gauche -!- ");
getch();
system("CLS");
lecture();
affiche(premier,prem);
}
Voila je vous ai mis le code complet afin ke vous puissiez le compilez et me dire pkoi 4 warning et regler mon pd d'affichage.
merci par avance de votre soutien.