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] Régles non reconnue (erreur)


Sujet :

Générateurs de compilateur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 106
    Par défaut [flex] Régles non reconnue (erreur)
    Bonjour, je suis un débutant en analyse lexical et j'ai un problème lors de la génération du ficher lex.yy.c voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    IDF [a-zA-Z](([0-9]|[A-Za-z]|_)?([a-zA-Z]|[0-9]))*
    CONSTANTE_ENTIERE [\+\-]? ([1-9][0-9]*|0)
    CONSTANTE_REEL [\+\-]?([1-9][0-9]*[\.][0-9]+)
    %%
    {IDF} { if (yyleng ᐸ=20) printf("Identificateur");
    else printf ("Erreur lexical : IDF trés long" );}
    {CONSTANTE_ENTIERE} { if (yyleng ᐸ=6) printf("Constante Réel");else printf("Erreur lexical : CONSTANTE-Entiere Trés longue");}
    {CONSTANTE_REEL} { if (yyleng ᐸ=12 ) printf("Constante Réel"); else printf("Erreur lexical : CONSTANTE-REEL Trés longue");}
    . printf ("erreur lexical");
    et voici l'erreur:

  2. #2
    Membre expérimenté
    Profil pro
    DSI
    Inscrit en
    Mai 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DSI

    Informations forums :
    Inscription : Mai 2009
    Messages : 120
    Par défaut
    Bonjour,

    Voila rereédition du message,

    pour tes règles j'aurais plus écris quelque chose comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    IDF 					[a-zA-Z](([0-9]|[A-Za-z]|_)?([a-zA-Z]|[0-9]))*
    CONSTANTE_ENTIERE 		[+-]?([1-9][0-9]*|0)
    CONSTANTE_REEL			 [+-]?([1-9][0-9]*"."[0-9]+)

    Chez moi ca compile bien, si tu as des erreurs sur ca dis le moi.

    Si je me rappelle bien dans flex si tu es dans un classe [] alors les caracteres que tu entres sont pris tel quel sauf le ^ qui represente tout sauf.

    Donc \+ veux dire le caractere \ ou le caractere + et non pas echapement du +, si tu veux faire de l'echapement tu sors de la classe :

    \+ | \- par exemple.

    Bonne journée

    ps : pourquoi dans le forum c ?

  3. #3
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 496
    Par défaut
    Citation Envoyé par e-fitz Voir le message
    ps : pourquoi dans le forum c ?
    Parce qu'il n'y a pas de forum Lex & Yacc, et que ces outils utilisent et génèrent du langage C par défaut…

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 496
    Par défaut
    Citation Envoyé par nadjibnet Voir le message
    voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CONSTANTE_ENTIERE [\+\-]? ([1-9][0-9]*|0)
    et voici l'erreur:
    Apparemment, Lex n'aime pas l'espace tout seul entre le « ? » et la « ( ». Essaie de l'échapper avec « \ » devant.

  5. #5
    Membre expérimenté
    Profil pro
    DSI
    Inscrit en
    Mai 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DSI

    Informations forums :
    Inscription : Mai 2009
    Messages : 120
    Par défaut
    Bonsoir, normalement l'espace étant significatif ca ne devrait pas poser de problème sur l'espace, étrange...

  6. #6
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 106
    Par défaut
    merci infiniment pour vos réponses

    mais j'ai un autre problème cette foi si c'est avec la fonction "yyleng"(qui calcule la taille de la chaîne entrée qui n'est pas reconnue par le compilateur c (gcc) lors de la compilation du fichier lex.yy.c .
    voila le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    %{
    #include<stdio.h>
    #include<stdlib.h>
    %}
    IDF [a-zA-Z](([0-9]|[A-Za-z]|_)?([a-zA-Z]|[0-9]))*
    CONSTANTE_ENTIERE [+-]?([1-9][0-9]*|0)+
    CONSTANTE_REEL [+-]?([1-9][0-9]*[\.][0-9]+)
    COM [\$](\n)*(.)*[\$]
    %%
    {IDF} { if (yyleng ᐸ=20) printf ("Identificateur");else printf ("Erreur lexical : IDF trés long" );}
    {CONSTANTE_ENTIERE} { if (yyleng ᐸ=6) printf ("Constante Réel");else printf ("Erreur lexical : CONSTANTE-Entiere Trés longue");}
    {CONSTANTE_REEL} { if (yyleng ᐸ=12 ) printf ("Constante Réel"); else printf ("Erreur lexical : CONSTANTE-REEL Trés longue");}
    voici l'erreur:

  7. #7
    Membre expérimenté
    Profil pro
    DSI
    Inscrit en
    Mai 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DSI

    Informations forums :
    Inscription : Mai 2009
    Messages : 120
    Par défaut
    Bonjour, ne serait ce pas plutot dès caractéres bizares qui se seraient glissés dans ton code compilé par lex ?

    Ca fait plusieurs fois que je me pose la question mais je vois toujours dans ton code & # 5176 ;= pour & # 5176 ; je ne sais pas si c'est le forum ou rééllement toi qui le met dans ton code, mais si tu as bien du & # 5176 ; tu obtiendras ce genre d'erreur, donc je me dis que tu as peut etre des caractères incompatible dans ton fichier .c compilé.

    Tu compiles ton lex sous quel systeme d'exploitation ?

  8. #8
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 496
    Par défaut
    Citation Envoyé par e-fitz Voir le message
    Bonjour, ne serait ce pas plutot dès caractéres bizares qui se seraient glissés dans ton code compilé par lex ?
    Je me suis posé la question aussi mais il semblerait que le code en question corresponde à « < » mais dans la page de code CJC (asiatique). Je ne sais pas pourquoi ce signe est transcrit de la sorte ici…

  9. #9
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 106
    Par défaut
    Citation Envoyé par e-fitz Voir le message
    Bonjour, ne serait ce pas plutot dès caractéres bizares qui se seraient glissés dans ton code compilé par lex ?

    Ca fait plusieurs fois que je me pose la question mais je vois toujours dans ton code & # 5176 ;= pour & # 5176 ; je ne sais pas si c'est le forum ou rééllement toi qui le met dans ton code, mais si tu as bien du & # 5176 ; tu obtiendras ce genre d'erreur, donc je me dis que tu as peut etre des caractères incompatible dans ton fichier .c compilé.

    Tu compiles ton lex sous quel systeme d'exploitation ?

    merci c'est sou linux mandriva 2010 power pack

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

Discussions similaires

  1. [MySQL sous Vista] Erreur #1146 table 'xx.xx' non reconnu
    Par dragonfly80 dans le forum Administration
    Réponses: 6
    Dernier message: 30/03/2017, 14h20
  2. [Free Pascal] Erreur non reconnue
    Par bronsoe dans le forum Free Pascal
    Réponses: 7
    Dernier message: 23/04/2011, 11h06
  3. Erreur, classe non reconnue
    Par tet2brick dans le forum Langage
    Réponses: 7
    Dernier message: 24/09/2010, 10h48
  4. erreur non identifiée espèce non reconnu
    Par matrixspirit dans le forum Bioinformatique
    Réponses: 10
    Dernier message: 25/04/2008, 17h37
  5. definition de type non reconnu par g++ ou erreur?
    Par harsh dans le forum Autres éditeurs
    Réponses: 7
    Dernier message: 09/06/2006, 01h42

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