9
votes

Se lancer avec Antlr et éviter les erreurs courantes

J'ai commencé à apprendre AntlR et j'ai à la fois le livre 2007 "la référence définitive en AntlR" et les antlrworks (un outil interactif pour créer des grammaires). Et, être ce genre de personne, j'ai commencé au chapitre 3. ("Une visite rapide pour l'impatience").

C'est un processus assez douloureux, notamment car certaines erreurs sont plutôt impénétrables (par exemple, Antlr: "Attribut manquant accès à la portée de la règle" Problème , qui signifie juste pour moi "Vous avez quelque chose de mal"). De plus, j'ai des grammaires très simples (3-4 productions uniquement) et une entrée simple (2 lignes) qui, lorsqu'elle est exécutée, donnez une erreur "OutofMemory".

Le site AntLR est utile mais quelque peu fragmenté et certains utilisateurs ont commenté ( https: // Stackoverflow. com / Questions / 278480 / Good-Tutoriel-For -TlR ) que le livre et les didacticiels attendent un niveau d'entrée élevé. Je suis réticent à approcher de la liste de discussion en AntLR à cause de cela.

plus tard Nous commençons à se familiariser avec elle. Il serait utile d'avoir des exemples fiables simples pouvant être élargis doucement. Cela mérite certainement la maîtrise que nous avons rénové beaucoup de nos pensées basées sur Antlr.

Un problème est que AntlR V3 a des changements significatifs de V2. Une réponse sur SO (et sur les pages Antlr) a été référée à une syntaxe V2 qui n'est plus disponible.

Certaines des questions anti-ANTLR sur elles ont beaucoup aidé beaucoup, mais les trouver est un peu ad hoc. J'aimerais donc savoir comment afin que les utilisateurs puissent aider à rendre le processus d'apprentissage moins douloureux. (Si vous vous référez au livre de référence, il serait utile de pointer sur des pages particulières).

Modifier . @duffymo et @jamesanderson ont confirmé que AntLR est un travail difficile - en grande partie parce que les analyseurs sont difficiles. (FWIW J'ai traversé Lex / Yacc, etc. et il ne fait aucun doute que Antlr est plus puissant et plus facile à travailler avec.) Je pense qu'il serait toujours utile d'avoir des zones où il est possible d'éviter d'encrasser des encrassements tels que:

  • Assurez-vous que la capitalisation correcte des noms variables
  • Ajouter un nom de package à Lexer ainsi que Parser
  • Prenez soin de l'ordre des règles, car il affecte la priorité

    Et plus de ces trimes seraient utiles.


1 commentaires

Bien que non spécifiquement sur ANTLR, TER a écrit un livre ultérieur appelé modèle de mise en œuvre de la langue. C'est un excellent travail avec pertinence pour les débutants et le vétérinaire. I | MVHO Un must absolu pour quiconque fait de l'analyse de travail.


3 Réponses :


7
votes

Je suis d'accord - Antlr n'est pas pour les faibles de cœur. Cela attend un niveau d'entrée élevé, car les grammates et les analysaires ne sont pas triviaux.

avec cela dit, voici quelques suggestions:

  1. oublie v2. La version 3 est la norme; Ne perdez même pas de temps à envisager la version antérieure ou sa documentation.
  2. OutofMemoryError vous dit qu'il y a quelque chose de circulaire dans la grammaire que vous avez définie.
  3. Intellij a une merveilleuse IDE pour travailler avec AntLR V3. Cela vous donnera une représentation graphique de votre grammaire, de votre débogage progressif, etc. Si vous allez faire beaucoup de travail avec ANTLR, cela vaut quelques dollars pour acheter une licence.

    Antlr ne sera pas facile à maîtriser. Le livre est bon, mais dense. Les messages d'erreur sont cryptiques, comme vous l'avez noté. Je serais surpris si quelqu'un ici pouvait le rendre facile.


2 commentaires

Juste pour signaler, Antlrworks est également génial pour la construction de grammaires et comporte un peu comme vous liste pour Intellij.


Antlrworks est un plug-in Intellij. Je ne l'ai pas utilisé à l'extérieur de l'IDE.



5
votes

Désolé, mais mon expérience d'Antlr (en effet Javacc, Bison ou tout anal d'analyseur complet) est que la plupart de votre apprentissage seront en corrige vos propres erreurs!

Obtenir de bons exemples de Code des autres peuples découpera quelque peu, les meilleurs exemples semblent vraiment simples - mais il vous manque toute la transpiration et les cheveux qui tirent pour les amener à regarder aussi facilement.


1 commentaires

Je viens de commencer avec elle et "tirer les cheveux" est en effet la terminologie technique correcte pour la courbe d'apprentissage associée à ANTLR. Bien que j'ai le sentiment d'avoir l'impression qu'une fois que vous atteignez le sommet de MT Antlr, la vue d'Atop est spectaculaire.



2
votes

Même si vous préférez la ligne de commande, il vaut la peine d'utiliser des antlrworks lorsque vous avez des problèmes. La représentation diagramatique peut faciliter la voir ce que je me trompe.

Une image vaut mille messages d'erreur.


0 commentaires