begin process at 2010 02 09 21:17:48
  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é :2 139 / 152

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 RECHERCHE D'ANNAGRAMMES par Torin
GESTION DE CHAINE DE CARACTÉRE EN C++ AVEC NSTRING par xmustapha
Source avec Zip COMMENTER CODE C <=> ASM (WIN64) par BruNews
Source avec Zip GSTRING - GESTION DES CHAINES DE CARACTÈRES par Neokript
DISTANCE DE JARO-WINKLER par PoulpHunter

 Sources en rapport avec celle ci

Source avec Zip COLORATION SYNTAXIQUE AVEC QSYNTAXHIGHLIGHTER DU FRAMEWORK Q... par christophedlr
Source avec Zip Source avec une capture COMPARATEUR D'IMAGES DE CONSOLE MONOCHROME DE BASE ET CRÉATI... par ATH|500|
Source avec Zip Source avec une capture COLORATION SYNTAXIQUE par JCDjcd
Source avec Zip Source avec une capture INTERPRETATION DE COMMANDE : CALCULATRICE ET DESSIN DE GRAPH... par rzomalala
Source avec Zip Source avec une capture MODULE D'INTÉGRATION DE CHAINES DANS UNE MATRICE : SCRABLE par DocteurPV

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 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, aide code mot anagramme [ par sahbibenayed ] bonjour;je travaille sur borland C++;je souhaite coder un programme permattant de scanner une chaine de caractere, puis afficher dans chaque ligne les un analyseur lexical de turbo pascal en c [ par linkolen ] slt j un tp de compilation je ne sais pas koa faire j besoin d'un program en c qui fait l'analyse lexical et syntaxique d'un pgm pascal (lex et yacc d comment supprimer un mot de passe administrateur [ par perrotta ] salut !!je veut savoir comment supprimer le mot de passe administrateur ....grazi. comment mettre un mot en surbrillance? [ par abubakr01 ] bon soir;je veux mettre une chaine de caractere en surbrillance, pouvez-vous me montrer comment faire SVP.(visuel ou dev)&amp; merci Problème pour compter un nombre de lettres [ par Schlaf ] Bonjour,alors voila je doit rédiger un script , voici l'énoncé:(tableau a 1 dimension):Écrire le script qui permet de saisir un mot et qui permet de d


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

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,076 sec (4)

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