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 :

ANTLR3 - Besoin d'aide pour commencer


Sujet :

C#

  1. #1
    Membre émérite Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Par défaut ANTLR3 - Besoin d'aide pour commencer
    Bonjour,

    Je bloque avec l'utilisation de regex. Voyez un exemple de texte (shaders quake 3) que je voudrais traiter:

    Code shader : 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
    shadername1
    {
        //attributs
     
       {
            //attributs
       }
       {
            //attributs
       }
       //...
    }
     
    shadername2
    {
        //attributs
       {
            //attributs
       }
       {
            //attributs
       }
       //...
    }

    Il y a 2 types de blocks: les shaders et les stages dans les shaders. Tout deux délimités par des accolades.

    Je ne sais pas comment délimiter les groupes du regex "par niveau"..

    Si c'est possible j'aimerais pouvoir identifier les différents shaders avec leur nom, ainsi que leurs stages.

    Merci pour votre aide

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par -N4w4k- Voir le message
    Je ne sais pas comment délimiter les groupes du regex "par niveau"..
    Jette un coup d'oeil aux balancing groups, ça devrait permettre de faire ce que tu veux...
    Cela dit, je ne pense pas que les regex soient un outil très adapté à ce genre de traitement... il vaudrait sans doute mieux faire un vrai parseur, en utilisant ANTLR par exemple

  3. #3
    Membre émérite Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Par défaut
    Dans mon projet je dois parser plusieurs sortes de fichier donc je vais jeter un coup d’œil à la librairie que tu m'as indiquée

    Merci.

  4. #4
    Membre émérite Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Par défaut ANTLR - Besoin d'aide
    Bonjour,

    Ca fait maintenant 3 jours que j'essaie de faire fonctionner la librairie ANTLR4 dans un projet C# mais je ne trouve aucun tutorial clair..

    Est ce que quelqu'un aurait des liens qui pourraient m'aider?

    Merci

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Bah perso je m'en suis jamais servi, donc je saurais pas t'aider, mais il y a un tuto ici :
    http://yvesmouafo.developpez.com/tut...ammaire-antlr/
    (publié hier)

  6. #6
    Membre émérite Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Par défaut
    ANTLR a l'air bien mais je ne trouve pas assez d'info sur le sujet pour parvenir à faire ce que je veux. Je réessayerais un autre jour mais pour l'instant je vais utiliser les regex.

  7. #7
    Membre émérite Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Par défaut
    Bon j'ai un peu avancé dans l'utilisation d'ANTLR. Pour écrire ma grammaire, générer le lexer et le parser j'utilise le logiciel ANTLRWorks 1.5.jar. Pour utiliser le lexer et parser j'utilise la DLL ANTLR3.Runtime.dll. Je précise car ça peut faire gagner du temps à d'autres personnes..

    Je me suis donc lancé dans la rédaction de ma grammaire et j'ai du mal à trouver de l'aide pour corriger ce que je fais. Ca serait super si quelqu'un pouvait jeter un coup d’œil et me dire pourquoi j'obtiens une MismatchedTreeNodeException au moment de générer le lexer et parser dans ANTLRWorks

    Voici la grammaire (lexer et parser combinés):
    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
     
    grammar Shader;
     
    options {
        language=CSharp2;
    }
     
    /*------------------------------------------------------------------
     * PARSER RULES
     *------------------------------------------------------------------*/
     
    shader : line NEWLINE* LBRACE ( line NEWLINE* )* ( stage NEWLINE* )* RBRACE;
     
    stage : LBRACE NEWLINE* ( line NEWLINE* )* RBRACE;
     
    line : LINE;
     
    /*------------------------------------------------------------------
     * LEXER RULES | 
     *------------------------------------------------------------------*/
     
    NEWLINE : '\r' '\n' | '\n' | '\r';
     
    LBRACE : '{';
     
    RBRACE : '}';
     
    LINE : ~( NEWLINE | LBRACE | RBRACE )+;
    Merci de votre aide

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    A mon avis il y a assez peu de chances que tu trouves ici quelqu'un qui connaisse bien ANTLR ; tu aurais sans doute plus de chances sur le forum d'ANTLR ou sur Stack Overflow, si l'anglais ne te pose pas de problème.

  9. #9
    Membre émérite Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Par défaut Parsing shaders quake 3
    Salut tomlev,
    J'avais posté sur StackOverflow pour avoir une correction de ce que je faisais mais je n'ai jamais eu aucune réponse. Puis j'en ai eu marre de perdre du temps et je me suis remis sur les regex car j'ai au moins les bases pour pouvoir m'auto corriger.

    J'ai finalement réussi à construire une expression qui me permet de faire ce que je veux. La voici:

    Noter qu'il faut rajouter le @ devant les guillemets. Je l' ai enlevé car sinon il n'y avait pas la coloration syntaxique.. Un admin peut modifier si c'est pas la bonne façon de faire..

    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
    Regex regex = new Regex("
     
    (?<name>[^{}]+)(:(?<type>[^{}]+))?          # Definition du shader (e.g. 'textures/custom/grass1:q3map')
    \{                                          # accolade ouvrante 1er niveau
    (?<attributes>[^{}]+)                       # Tout ce qui ce trouvera entre l' accolade ouvrante 1er niveau et le 1er stage
                                                # Début des stages
    (?>
    \{(?<P>)                                    # accolade ouvrante 2nd niveau - On commence à empiler sur la pile P
    |                                           # ou
    [^{}]+                                      # On continue d'empiler sur la pile P tant qu'il n'y pas l'accolade fermante 2nd niveau
    |                                           # ou
    (?<stage-P>)\}                              # accolade fermante 2nd niveau - On transfert le contenu de P dans une nouvelle capture du groupe 'stage' (P est vidé)
    )*
                                                # Fin des stages
    (?(P)(?!))                                  # On verifie que la pile P est vide (imbrication valide)
    \}                                          # accolade fermante 1er niveau"
     
    , RegexOptions.IgnorePatternWhitespace);
    J'espere que dans un futur proche j'aurais l'occasion de reprendre l'apprentissage de ANTLR car ça avait vraiment l'air cool.. En tout cas merci pour ton aide tomlev

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

Discussions similaires

  1. besoin d'aide pour une requête
    Par Damien69 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 31/03/2004, 15h38
  2. besoin d'aide pour le composant DBComboBox
    Par jane2002 dans le forum Bases de données
    Réponses: 8
    Dernier message: 28/02/2004, 19h01
  3. [Kylix] besoin d'aide pour installer kylix3
    Par Sph@x dans le forum EDI
    Réponses: 3
    Dernier message: 11/02/2004, 13h53
  4. [TP]besoin d'aide pour commandes inconnues
    Par Upal dans le forum Turbo Pascal
    Réponses: 15
    Dernier message: 03/10/2002, 10h48
  5. Besoin d'aide pour l'I.A. d'un puissance 4
    Par Anonymous dans le forum C
    Réponses: 2
    Dernier message: 25/04/2002, 17h05

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