Programmer l'analyse lexicale [Résolu/Fermé]

Ouldmeamina 2 Messages postés mardi 18 octobre 2016Date d'inscription 19 octobre 2016 Dernière intervention - 18 oct. 2016 à 20:32 - Dernière réponse : Ouldmeamina 2 Messages postés mardi 18 octobre 2016Date d'inscription 19 octobre 2016 Dernière intervention
- 19 oct. 2016 à 21:12
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.

#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.
Afficher la suite 

2 réponses

Dalfab 295 Messages postés dimanche 7 février 2016Date d'inscription 17 décembre 2017 Dernière intervention - 19 oct. 2016 à 19:59
0
Utile
1
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
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.
Ouldmeamina 2 Messages postés mardi 18 octobre 2016Date d'inscription 19 octobre 2016 Dernière intervention - 19 oct. 2016 à 21:12
Merci pour votre réponse mais j'ai complimente mon code avec predicat[j]=text[i];
predicat[++j] = '\0'; // et terminer la chaîne mais en exécution j'ai que des symbole indéfini aide moi stp