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

Autres Java Discussion :

ANTLR - probleme identifieur et valeur hexadécimal


Sujet :

Autres Java

  1. #1
    Membre éclairé
    ANTLR - probleme identifieur et valeur hexadécimal
    Bonjour à tous

    Je regarde comment fonctionne ANTLR, et je suis bloqué sur le problème suivant

    je souhaite parser quelque chose qui reseemble à ceci

    Instruction Idenfieur
    Instruction $HexaDecimalvalue

    j'ai donc créer mes règles comme ceci (c'est un résumé):

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    line: 
            instruction 
            (
                  Identifier
               | '$' numericvalue
            );
     
    numericvalue:
          HexaNumber
       ;   
     
    HexaNumber : ('-' | '+')? ( '0'..'9' | 'a'..'f' | 'A'..'F')+ ;
     
    Identifier : ('_' | Letter) ('_' | Letter | Figure)* ;


    Mon parseur fonctionne bien sauf dans un cas précis;: Quand ma valeur hexadécimal commence par A,b,c,d,e,f.

    j'ai compris pourquoi, mais je ne sais pas comment le résoudre

    Quand ma valeur hexadecimal commence par une lettre, mon lexer traduit le texte en identifier. et du coup je ne match plus avec ma grammaire.

    Par exemple, FAFA est aussi un un nombre hexadécimal qu'une chaine de caractère

    Comment puis je résoudre ce conflit

    merci
    Page sur Developpez : http://pbriand.developpez.com

  2. #2
    Modérateur

    Sauf erreur de ma part, je vois deux solutions :

    Tu peux inverser les deux règles :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    line: 
            instruction 
            (
                 '$' numericvalue
               | Identifier
            );


    Ou alors tu intègres le caractère '$' dans la règle HexaNumber.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Membre éclairé
    merci dinobogan

    C'est tellement évident que j'ai honte, j'ai pris la deuxième solution.

    j'étais entrain de chercher une solution complexe, style predicates, alors que la plus simple suffisait.
    Page sur Developpez : http://pbriand.developpez.com