Programmer l'analyse lexicale
Résolu
Ouldmeamina
Messages postés
4
Statut
Membre
-
Ouldmeamina Messages postés 4 Statut Membre -
Ouldmeamina Messages postés 4 Statut Membre -
Aidé moi stp
Programmer l'analyse lexicale du langage prolog en utilisant le langage de programmation c++
de créer des fichier contenant des exemple de programme écrits en prolog .
Le code source de l'analyse.
Mais mon code ne marché pas bien j'ai un problèmes au niveau des boucle
Programmer l'analyse lexicale du langage prolog en utilisant le langage de programmation c++
de créer des fichier contenant des exemple de programme écrits en prolog .
Le code source de l'analyse.
#include<stdio.h>
#include<stdlib.h>
#include<cstdio>
#include<iostream>
int main (){
FILE *fichier = NULL;
char x;
char text[21];
int i=0,j=0,n=0,m=0;
char predicat[20];
char id1[20];
char id2[20];
char sep1,sep2,sep3,sep4;
int etat=1;
fichier=fopen("prog.txt","r");
if (fichier==NULL){
printf ("ERRREUR");
}else {
fgets(text,sizeof text , fichier);
printf ("En lecture\n");
printf ("%s\n",text);
}
for (i=0;i<sizeof(text);i++){
x=text[i];
if (text[i]=='.'){
etat=5;
} else if(text[i]=='('){
etat=2;
} else if(text[i]==','){
etat=3;
} else if(text[i]==')'){
etat=4;
} else {
if (etat==1){
predicat[j]=predicat[j]+text[i];
j++;
} else if(etat==2){
id1[n]=id1[n]+text[i];
n++;
} else if(etat==3){
id2[m]=id2[m]+text[i];
m++;
}
}
}
printf ("\nLe predicat est : ");
for (i=0;i<sizeof(predicat);i++)
printf ("%c",predicat[i]);
printf ("\nL'identificateur 1 est : ");
for (i=0;i<sizeof(predicat);i++)
printf ("%c",id1[i]);
printf ("\nL'identificateur 2 est : ");
for (i=0;i<sizeof(predicat);i++)
printf ("%c",id2[i]);
printf ("\n");
Mais mon code ne marché pas bien j'ai un problèmes au niveau des boucle
| EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI Merci d'y penser dans tes prochains messages. |
A voir également:
- Programmer l'analyse lexicale
- Programmer sms - Guide
- Analyse composant pc - Guide
- Analyse disque dur - Télécharger - Informations & Diagnostic
- Analyse performance pc - Guide
- Programmer mail gmail - Guide
1 réponse
Bonjour,
Ce code est du C pas du C++! C'est même du C de très bas niveau!
Quand tu fais predicat[j]=predicat[j]+text[i]; (en C ou en C++), que penses-tu faire?
predicat étant non initialisé, tu dis que la j-ième lettre est un nombre aléatoire auquel tu ajoutes le caractère lu.
Un correctif (en langage C) pourrait-être
En C++, il existe des possibilités beaucoup plus simples. predicat étant alors un std::string et surtout pas un tableau de char.
Ce code est du C pas du C++! C'est même du C de très bas niveau!
Quand tu fais predicat[j]=predicat[j]+text[i]; (en C ou en C++), que penses-tu faire?
predicat étant non initialisé, tu dis que la j-ième lettre est un nombre aléatoire auquel tu ajoutes le caractère lu.
Un correctif (en langage C) pourrait-être
predicat[j]=text[i]; predicat[++j] = '\0'; // et terminer la chaîne
En C++, il existe des possibilités beaucoup plus simples. predicat étant alors un std::string et surtout pas un tableau de char.
predicat[++j] = '\0'; // et terminer la chaîne mais en exécution j'ai que des symbole indéfini aide moi stp