Analyseur syntaxiquev(0.1)

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

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)