Analyseur syntaxiquev(0.1)

Soyez le premier à donner votre avis sur cette source.

Vue 8 764 fois - Téléchargée 711 fois

Description

salut
voila une premier version(phase 1) d'un analyseur syntaxique fait par un (amateur +un débutant) :-)que je vais essayer à chaque fois de l'améliorer:
quand vous entez une phrase par exemple A23 23 a+
le résulta sera A2" identificateur ;23 entier ;a+ invalide
après vous aurez une analyse de la phrase : A lettre 2 chiffre...

si vous avez des remarque n'hésitez pas

Source / Exemple :


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

  int fct_chiffre(char c);
  int fct_lettre(char c);
  int fct_operateur(char c);
  int fct_Identificateur(char *tab,int d,int f);
  int fct_entier(char *tab,int d,int f);
  void affiche(char *tab,int d,int f);
  void fct_test(char  tab[]);//pour determiner les lettres,les chiffres et les operateur

int main() {
char phrase[200];
printf("\n\n");
printf("************************>>>>>>>>>>>>kohan95<<<<<<<<<<<<<<<************************** ");
printf("\n\n \t \t\t ****||enter une pharse\n" );
printf("\n\n \t \t\t ***||" );gets(phrase);
int debut=0,fin;
int i=0 ;
int n=strlen(phrase);

while(i<n+1){
         if(phrase[i]==' '|| i==n) {
         fin=i-1;
          if(fct_Identificateur(phrase,debut,fin)) affiche(phrase,debut,fin),puts(": Identificateur");
          else if (fct_entier(phrase,debut,fin)) affiche(phrase,debut,fin),puts(": Entier");
             else affiche(phrase,debut,fin),printf(": Non valide")   ;
             debut=fin+2;
             i=fin+1;
   }
  i++;
}
    puts("\n\n\t anlyse de la phrase\n ");
     fct_test(phrase);

    puts("\n\t\t\t fin deu programe");
    getchar();

    return 0;
}
int fct_chiffre(char c){
    if (c>='1' && c<='9')return 1;
    return 0;
}
int fct_lettre(char c){
    if( (c>='a' && c<='z') ||(c>='A' && c<='Z'))return 1;
    return 0;
}
int fct_Identificateur(char *tab,int d,int f){
 if(!fct_lettre(tab[d])) return 0;

  while(d+1<=f+1){

      if(!fct_lettre(tab[d]) && !fct_chiffre(tab[d]) &&  tab[d]!='_') return 0;
      else d++;

  }
    return 1;

}
int fct_entier(char *tab,int d,int f){

 while(d<=f){
     if(!fct_chiffre(tab[d])) return 0;
        else d++;

            }
    return 1;
}
void affiche(char *tab,int d,int f){
     printf("\n\t");
     while(d<=f){

     printf("%c",tab[d]);
     d++;
               }
}
int fct_operateur(char c){
char operateur[10]="<>=+-*/!%";
int i=0;
for(i;operateur[i];i++){
    if(c==operateur[i])return 1;
    }

return 0;
}

 void fct_test(char  tab[]){
        int j=0;
        int i=0;
       for(;tab[i];i++){

             if (fct_lettre(tab[i])){
                 printf("%c :lettre\n",tab[i]);
                                                    }
                else if(fct_chiffre(tab[i])){
                        printf("%c :chiffre \n",tab[i]);
                            }
                          else if(fct_operateur(tab[i])){
                                  printf("%c :Operateur \n",tab[i]);
                                             }
                         }

                          }

Conclusion :


d'autres amélioration à venir

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
7
Date d'inscription
vendredi 23 janvier 2015
Statut
Membre
Dernière intervention
6 août 2017

Peut tu le modifier en le rendant capable de lire la phrase depuis un fichier texte? j'ai tous essayé et je n'y arrive toujours pas :(
Messages postés
35
Date d'inscription
lundi 5 février 2007
Statut
Membre
Dernière intervention
28 juillet 2010

oui de tout façon j'abandonne le projet car je viens de voir flex qui plus même beaucoup mieux :-)
Messages postés
32
Date d'inscription
vendredi 26 mai 2006
Statut
Membre
Dernière intervention
14 avril 2009

correction, il s'agit d'une analyse lexical puisque tu identifie les lexèmes c'est tous et certainement pas d'un parser ( et crois moi c'est totalement différent de ce que je vois la)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Du même auteur (kohan95)