begin process at 2012 02 05 04:23:09
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Chaîne de caractères

 > ANALYSEUR SYNTAXIQUEV(0.1)

ANALYSEUR SYNTAXIQUEV(0.1)


 Information sur la source

Note :
Aucune note
Catégorie :Chaîne de caractères Classé sous :analyseur, syntaxique, phrase, mot Niveau :Débutant Date de création :13/05/2009 Vu / téléchargé :5 320 / 332

Auteur : kohan95

Ecrire un message privé
Commentaire sur cette source (2)
Ajouter un commentaire et/ou une note

 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

  • #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]);
  • }
  • }
  • }
#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

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip ÉTUDIANT

 Sources de la même categorie

Source avec Zip [C] WD_STRING V2.2 par cyberripper
Source avec Zip LES STRING EN C, AFFECTATION, CONCATÉNATION, SPLIT, ... par appranting
Source avec Zip [C] WD_STRING V1.9 par cyberripper
Source avec Zip LIBRAIRIE LANGUAGES par astro53
FONCTION : CHAR * AJUSTERTAILLECHAINE() par Rockanos

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture ANALYSE SYNTAXIQUE par lajouad
Source avec Zip Source avec une capture ANALYSEUR_LEXICAL_TABLEAU par Donald180v
Source avec Zip Source avec une capture ANALYSEUR LEXICAL par Donald180v
Source avec Zip ANALYSEUR SYNTAXIQUE DU LANGUAGE PASCAL (ANALYSE DESCENDANTE... par wiseman1989
Source avec Zip Source avec une capture INTERPRETATION DE COMMANDE : CALCULATRICE ET DESSIN DE GRAPH... par rzomalala

Commentaires et avis

Commentaire de xtremejames183 le 22/05/2009 16:04:29

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)

Commentaire de kohan95 le 23/05/2009 02:09:40

oui de tout façon j'abandonne le projet car je viens de voir flex qui plus même beaucoup mieux :-)

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

saisir une lettre, un mot, une phrase en CPP [ par val3113 ] Bonjour, je suis nouveau en c++ et j'essaie de faire un bete programme console qui permettrait de saisir une lettre, puis un mot, puis une phrase. J'u analyseur lexical et syntaxique [ par talzou ] salut si vous pouvez m'aider j'ai besoins d'un code source pour un analyseur lexical de langage pascal programmer en c ou c++ merci analyseur lexical &syntaxique en c [ par amfa ] salut ,je cherche le code source de lanalyseur lexical &amp; syntaxique en langage c,si vous avez qlq chose sur ce sujet ,aidez moi,merci davance caractères arabe [ par zargooo04 ] Bonjours tous le monde, Je suis entrain de travailler sur un programme qui traduit une phrase arabe en fronçai. Et mon premier problème si de lire les analyseur lexical et syntaxique pour un langage pascal programmer en c++ [ par talzou ] j'ai besoins d'un analyseur lexical et syntaxique de langage pascal programmer en devc++merci decoupage de trame NMEA [ par max59000 ] Bonjours,je souhaite decouper une trame MNEA du type:$IIMWV,R,000.30,N,A&lt;CR&gt;&lt;LF&gt;$WIXDR,C,020.0,C,&lt;CR&gt;&lt;LF&gt;$IIVHW, , , , ,7.2,N, [BAR]Retrouver mot de passe [ par brig13690 ] Bonjour tout le monde, Comment puis-je faire pour retrouver mon nom utilisateur et mon mot de passe WINDOWS ? Merci pour votre aide javascript:void nombre d'occurence des termes d'un fichier texte [ par mervat ] bonjour, ce programme permet de déterminer le nombre d'occurence de tous les termes dans un texte, j'ai créé une liste contenant les termes du texte, fréquence de tous les termes dans un dossier [ par mervat ] bonjour, pour avoir la fréquence de tous les termes dans un dossier, j'ai écrit le code ci-dessous: si par exemple mon dossier "test" contient 3 fichi utilisation de EOF sur les fichier .txt [ par eliramomo ] je veux lire un fichier .txt mot par mot et qu'il s'arrete lorsqu'il est a la fin , comment dois je faire svp.


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,357 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales