IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

analyseur lexical en C


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Par défaut analyseur lexical en C
    salut
    je suis chargée de faire un analyseur lexical développé en langage C, j'arrive pas à faire un plan pour mon travail, les principaux structures que je dois créer. j'ai compris qu'il faut que je crée une structure de donnée qui contient deux champs:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    struct res_retour
        {
            char unité;
            char attribut;
        }
    Cependant y'en a pleins de questions qui se posent:
    comment ferai-je la vérification, quelle est la variable qui contiendra les mots clés? doit-elle etre une structure de donnée? si oui quelles sont les champs? ou doit-elle etre une pile, tableau? et puis lors de traitement des différents cas {switch () case(nb): {...} break;case(id):{} break;...case(mot-clé) case (espace) ou doit-je stockés le résultat du case?



    Il est demandé de:
    *Construire un automate fini qui accepte l’ensemble suivant
    des mots (unités lexicales ou jetons, terminaux d’une grammaire) { :, id, :=, ;, nb, ,, nbr, +, *, entier, réel, (, ), espace }
    Où id représente les identificateurs alphanumériques qui commencent par un caractère alphabétique (l(l+c)*), nb représente les nombres entiers c+ et nbr est nombre réel c+.c+
    espace représente une séquence d’espaces blancs ou de tabulations.
    *Etendre l’automate pour pouvoir retourner à l’état final deux valeurs. La première est l’unité trouvée selon l’état final atteint et la deuxième est un attribut supplémentaire.
    Si l’unité trouvée est un id qui n’est pas un mot clé alors la première valeur retournée est id et la deuxième est une entrée dans une table contenant les identificateurs.
    Si l’unité trouvée est un mot clé (sachant que les mots clés sont : début, fin, program, var, entier, réel (Il faut sauvegarder quelque part cette liste de mots), alors, les valeurs retournées sont le mot clé et 0.
    Si l’unité est nb alors la deuxième valeur est la valeur de ce nombre. L’automate doit pouvoir sauter les espaces, les retours à la ligne et les tabulations.


    Je doit créer une fonction :RangerId() et UnilexId();

    La fonction RangerId() a accès au tampon où l’unité lexicale identificateur a été localisée. On examine la table des symboles et si on trouve le lexème avec l’identificateur mot clé, RangerId() rend 0. Si on trouve le lexème comme variable du programme, RangerId() rend un pointeur vers une entrée dans la table des symboles. Si on ne trouve pas le lexème dans la table des symboles, il y est placé en tant que variable et un pointeur vers cette nouvelle entrée est retourné.
    La fonction UnilexId() recherche le lexème dans la table des symboles. Si le lexème est un mot clé, l’unité lexicale correspondante est retournée; autrement, l’unité lexicale id est retournée.

    Voilà tout me parait ambiguë, votre aide me sera très utile .
    Merci d'avance

  2. #2
    Membre éclairé Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     typedef struct res_retour res_retour
        struct res_retour
        {
            char unité;
            char attribut;
        }
        struct unite
        {
            char *identificateur;
            int nb;
            double nbr;
        }
     
    }
    char carsuivant(File* fichier)
    {
        char caractereSuiv;
        if (fichier != NULL)
        {
           do
            {
               caractereSuiv = fgetc(fichier);
            } while ( caractereSuiv != '\n' && caractereSuiv != ' ' && caractereSuiv != '\t' && caractereSuiv != EOF);
     
            return caractereSuiv;
        }
     
    }
    rangerId(...)
    {
        char car;
        int i=0;
        bool existe;
     
        do
        {
          if (car == motclé[i])
          existe = true;
          else i++;
        } while (i < n);// n taille du tableau motclé
        if (existe)
        return 0;
        else if (...)
        {
            //traitement si c'est une variable du programme, comment vérifier que c'est une variable du programme??
            return unite.id; //retourne un pointeur sur la table de symbole.
        }
        else if(...)
        {
           // traitement si  le lexème n'existe pas dans la table de symbole, on l'ajoute et on crée un pointeur vers.
           return; //pointeur de cette nouvelle entrée
        }
     
    }

  3. #3
    Membre Expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Par défaut
    Salut,

    avant de coder, as-tu déjà dessiné ton automate (non déterministe que tu peux transforme en déterministe, ou directement déterministe) ?

  4. #4
    Membre éclairé Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Par défaut
    oui l'automate est déssiné et il est non déterministe.
    le prof nous a demandé d'utiliser une liste chainée

  5. #5
    Membre Expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Par défaut
    tu ne sais pas trop ce que tu dois faire mais tu dois le faire avec une liste ?
    Si tu nous postais l'énoncé je pourrais peut être mieux t'orienter.

  6. #6
    Membre éclairé Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Par défaut
    voilà l'énoncé, je dois faire la première partie.
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. petit analyseur lexical
    Par imadin dans le forum Général Java
    Réponses: 9
    Dernier message: 19/02/2008, 17h49
  2. Analyseur lexical en Pascal
    Par acacia dans le forum Langage
    Réponses: 5
    Dernier message: 29/11/2007, 15h43
  3. probléme dans l'analyseur lexical
    Par the sun dans le forum C#
    Réponses: 9
    Dernier message: 29/05/2007, 11h00
  4. Faire un analyseur lexical
    Par sylsau dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 29/03/2007, 12h41
  5. Analyseur lexical a 3 automates
    Par mehdouch dans le forum C
    Réponses: 2
    Dernier message: 29/03/2006, 11h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo