2010-03-29 7 views
9

J'ai utilisé ANTLR pour générer une grammaire parser + tree pour un langage de balisage avec une cible Java qui fonctionne correctement. Maintenant, j'essaie d'obtenir la cible en JavaScript pour l'utiliser dans mon navigateur Web.ANTLR JavaScript Target

Cependant, je n'ai pas trouvé de bonne documentation sur la façon de procéder. J'utilise eclipse avec ANTLR IDE, et quand je spécifie la langue en JavaScript, j'obtiens les erreurs suivantes.

marqueurs multiples à cette ligne

  • (10): erreur interne: JavaScript groupe ne répond pas à l'interface ANTLRCore: arguments ne correspondent pas sur ces modèles [treeParser (grammaire, nom, lunettes, jetons, tokenNames, globalAction , règles, numRules, bitsets, labelType, ASTLabelType, superclasse, membres, FilterMode)]

  • (10): erreur interne: java.util.NoSuchElementException: pas de tels attributs: FilterMode dans le contexte du modèle [treeParser]

Si quelqu'un pouvait m'aider avec ceci ou me montrer du matériel que je pourrais lire sur la cible JavaScript avec ANTLR, ce serait génial.

Merci

+1

Je suis actuellement capable de générer l'analyseur en JavaScript, et il reconnaît les choses très bien. Mais quand j'essaye de générer le trébuchement d'arbre dans la cible JavaScript, il n'est pas capable de le faire. Et je pense que la raison principale de ceci est l'erreur 2 énumérée ci-dessus. – Gunner4Life

+0

Je ne suis pas sûr de la version de la version ANTLR que vous essayiez d'utiliser, mais je voyais les mêmes erreurs avec les versions officielles que j'essayais d'utiliser. Je viens d'obtenir le tar ANTLR du serveur perforce et je l'ai construit avec maven, et les trucs javascript semblaient fonctionner pour moi - avec ma grammaire, certes triviale, au moins. –

+0

J'ai compris quelle était l'erreur. La cible JavaScript a été interrompue dans les dernières versions d'ANTLR, ce qui a causé le problème. La solution consiste à créer le code source ou à utiliser une version antérieure. – Gunner4Life

Répondre

0

Il semble que la cible JavaScript soit à nouveau cassée dans la distribution 3.4. 3.3 fonctionne bien pour moi cependant.

0

J'ai essayé d'obtenir ce travail, et ont juste réussi à générer .js avec succès après avoir lu ceci:

http://www.antlr3.org/pipermail/antlr-interest/2011-August/042417.html

De poste:

Voici comment commencer avec ANTLR et le JavaScript back-end:

  1. Télécharger ANTLRWorks 1.2.2: < http://antlr.org/download/antlrworks-1.2.2.jar>. La cible JavaScript ne fonctionne que lorsque l'EDI génère le code lexeur et analyseur (voir < http://antlr.1301665.n2.nabble.com/maven-plugin-and-javascript-target-td3647109.html>). Si vous essayez d'exécuter ANTLR v3.1 à partir de la ligne de commande, vous verrez l'erreur message "erreur (10): erreur interne: le groupe JavaScript ne satisfait pas l'interface ANTLRCore".
  2. Téléchargez la distribution d'exécution JS: http://antlr.org/download/antlr-javascript-runtime-3.1.zip

From then on you can use ANTLRWorks 1.2.2 to generate the lexer and parser code by selecting "Generate Code" from the "Generate" menu. ANTLRWorks will place the generated files into an output directory in the folder in which the grammar file resides.

Notez que si une erreur se produit dans le processus de génération, puis pour une raison quelconque l'action « Générer le code » ne fonctionne plus. Il suffit de fermer la grammaire et rouvrez-le à partir du menu "Ouvrir récent".

3

Il y a une nouvelle JS cible Lang pour ANTLR4 qui a été posté à GitHub il y a presque 3 mois:

antlr/antlr4-javascript

Il est pas intégré dans une sortie officielle, mais vous pouvez probablement le jeter dans la dernière base de code ANTLR4 et recompilez ANTLR vous-même.

+0

Le projet antlr4-javascript a maintenant des tests basés sur le navigateur et est beaucoup plus étoffé. Dans la source du JavaScriptTarget, il semble que la cible de publication prévue est ANTLR 4.5. – jhyry

+4

Lien ne fonctionne pas –

+0

Voici un meilleur lien avec des informations à jour: https://github.com/antlr/antlr4/blob/master/doc/javascript-target.md –