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

Générateurs de compilateur Discussion :

Flex, Actions réalisées par un fichier Flex


Sujet :

Générateurs de compilateur

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 11
    Points : 9
    Points
    9
    Par défaut Flex, Actions réalisées par un fichier Flex
    Bonjour,

    Dans le cadre d'utilisation de Flex pour la compilation, le but d'un fichier web.lex est de récupérer des données d'une page html.

    Le fichier est le suivant :

    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
    %{
    #include <stdio.h>
    #include <stdlib.h>
    int balise = 0;
    %}
     
    LETTRE [A-Za-zéè]
    CHIFFRE [0-9]
    ESPACE [ \t\n]
    CARACTERES !|_|-|\"|\'|\/|\.|=|\<|\>
    CONTENU {ESPACE}|{LETTRE}|{CHIFFRE}|{CARACTERES}
    COMENTAIRE <!--{CONTENU}+-->
     
    %%
     
    \< balise = 1;
    \> balise = 0;
    [\n\t] printf(" ");
    [^<>] if(balise == 0){
    printf("%s",yytext);
    }
    {COMENTAIRE} ;
     
    %%
     
    int main(void) {
    yylex();
    printf("\n Analyse finie\n");
    return -1;
    }

    Le problème c'est qu'étant novice en Flex, j'arrive pas à lire ce fichier et comprendre les actions réalisées par ce fichier.

    Je vous serai reconnaissant de m'aider.

    Merci à vous

    En vous remerciant.

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 400
    Points : 23 780
    Points
    23 780
    Par défaut
    Bonjour et bienvenue,

    Lex et Yacc (ou Flex et Bison pour les implémentations GNU de ces mêmes logiciels) servent à construire des compilateurs respectivement lexicaux et syntaxiques. Autrement dit, le premier sert à reconnaître les mots valides et le second à vérifier s'ils sont agencés selon les règles en usage (ta grammaire). Présenté d'un troisième point de vue, Lex va utiliser des expressions régulières pour reconnaître ces mots indépendamment du contexte et Yacc une grammaire éventuellement contextuelle en utilisant une notation à la BNF, et en s'appuyant éventuellement sur le travail pré-maché par Lex.

    Les fichiers de définitions de ces deux outils sont découpés en trois sections séparés par « %% », soit « déclarations », « règles » et « code ». Ces outils sont faits pour produire en sortie un programme source en langage C qui soit capable de reconnaître le langage que tu essaies de décrire. Cela dit, les actions à accomplir seront définies par toi et la majorité de ce qui va se trouver dans le code Lex ou Yacc sera quand même du C. Le programme proprement dit se trouvera par définition dans la troisième section mais il est possible de déclarer un « pré-bloc » inséré en tête de fichier dans la section des déclarations, entre les symboles « %{ » et « %} ». C'est utile pour insérer les headers nécessaires et déclarer certaines variables.

    Ce qui suit immédiatement est un ensemble d'expressions régulières préfixées par leur alias : ça te permet d'y faire référence dans tes règles sans avoir à les ré-écrire en entier à chaque fois. Par exemple, « CHIFFRE » correspond à l'expression « [0-9] », qui elle-même reconnaît exactement un caractère parmi « 0, 1, 2, 3, 4, 5 ,6, 7, 8, 9 ».

    Le plus important se trouve dans la deuxième section : à chaque ligne, on associe une expression régulière à un morceau de code C. La ligne commence par l'expression proprement dite, soit en faisant référence aux déclarations préalables, soit en spécifiant directement l'expression en question. Celle-ci est suivi d'un blanc et tout ce qui reste forme le code C. Il est nécessaire pour cette raison de mettre au moins un « ; » même si la règle ne doit mener aucune action.

    Une fois produit le fichier de sortie, il ne te reste plus qu'à le compiler normalement avec ton compilateur C et à le lancer. Dès que le programme principal (à l'intérieur de main()) appelle yylex(), l'analyse lexicale est lancée. Le texte sera alors lu linéairement du début à la fin et chaque fois qu'une de tes expressions régulières correspondra au motif en cours de lecture, la ligne de C associée sera exécutée.

    Ceci permet d'interpréter facilement des fichiers en lecture sans avoir à ré-implémenter tout le système d'analyse depuis zéro à chaque fois que l'on change de langage. Mais cela prend vraiment tout son sens à partir du moment où tu l'utilise en conjonction avec Yacc. Le premier programme est appelé par le second pour reconnaître les unités lexicales en tant que telles et, de là, vérifier si elles sont agencées correctement et donc faire l'analyse d'un langage de plus haut niveau.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    Bonjour

    Merci pour la réponse

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Actions réalisées par un fichier Flex
    Par Pedro3800 dans le forum Flex
    Réponses: 0
    Dernier message: 25/12/2014, 14h35
  2. [WS 2008] Loguer les actions réalisées sur un fichier
    Par digitaldna dans le forum Windows Serveur
    Réponses: 2
    Dernier message: 27/09/2010, 08h15
  3. Réponses: 0
    Dernier message: 08/04/2010, 21h11
  4. Lire un PDF en Flex/Action Script
    Par CocoRambo dans le forum Flash
    Réponses: 4
    Dernier message: 13/11/2009, 16h10
  5. Réponses: 1
    Dernier message: 31/10/2006, 16h50

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