J'essaie de construire une grammaire d'anti-anti-anti-anti-anti-anti-étiquette, telle que: et avoir la grammaire: p> le Le générateur de grammaire génère l'accès " [Je suis toujours nouveau à Antlr et bien que certains grammates fonctionnent, il est toujours d'essai et d'erreur . J'obtiens aussi souvent une erreur "OutofMemory" lors de l'exécution de Grammars aussi petite que celle-ci - Toute aide Bienvenue.] P> J'utilise des antlrworks 1.3 pour générer le code et que je cours sous Java 1.6. P> < / p> attribut manquant sur la lunette de la règle: nounphrase code>" dans la dernière ligne. P>
4 Réponses :
Répondre à la question après avoir trouvé une meilleure solution ...
WS : (' '|'\t')+; TOKEN : (('A'..'Z') | ('a'..'z'))+; dttok : 'DT' WS TOKEN; nntok : 'NN' WS TOKEN; nounPhrase : (dttok WS nntok); chunker : nounPhrase ;
Dans le grammer d'origine, pourquoi ne pas inclure l'attribut qu'il demande, probablement: chacune de vos règles ( Je pense que votre règle de chende devrait simplement être légèrement modifiée, à la place. de Vous voudrez peut-être faire un petit autre formatier également, généralement les règles d'analyseur (commencez par minuscule lettre) apparaissent avant les règles Lexer (commencez par la lettre majuscule) p> ps. Lorsque je tapez dans la case, la règle du chende commence sur une nouvelle ligne mais dans ma réponse originale, il n'a pas démarré sur une nouvelle ligne. P> P> chende code> être celui que je peux tache rapidement) ont des attributs (informations supplémentaires) associées à eux. Vous pouvez trouver une liste rapide des différents attributs pour les différents types de règles à http://www.antlr.org/wiki/display/antlr3/attribute+anddynynamic+Copes , serait bien que des descriptions ont été placées sur la page Web pour chacun de ces attributs (comme pour L'attribut Start and Stop pour les règles d'analyseur se réfèrent aux jetons de votre Lexer - qui vous permettrait de revenir à votre numéro de ligne et à votre position). P>
$ nounphrase code> Vous devez utiliser
$ nounphrase.text code>.
texte code> est un attribut pour votre
nounphrase code> règle. p>
Pourriez-vous élucider plus loin, s'il vous plaît? Je ne suis pas sûr de ce qu'est un attribut
"accès d'attributs manquant" signifie que vous avez référencé une portée ( En général, un bon moyen de résoudre les problèmes liés aux attributs consiste à examiner la méthode d'analyseur générée pour la règle en question. P> Par exemple, ma tentative initiale à la création Une nouvelle règle quand j'étais un peu rouillée: p> a abouti à " Attribut inconnu pour la règle Nom complet fort>". J'ai donc essayé p> qui entraîne " Attribut manquant d'accès fort>". En regardant la méthode d'analyseur générée, il est clair que je devais tout ce que je devais faire. Bien qu'il y ait des morceaux cryptiques, les pièces pertinentes pour les scopes (variables) sont facilement comprises: p> après avoir examiné le code généré, il est facile de voir que le la version dont vous avez besoin. Dans votre situation peut être différent, mais vous serez généralement capable de le comprendre assez facilement en examinant le code généré. p> p> $ nounphrase code>) plutôt que d'un attribut em> la portée (telle que
$ nounphrase. texte code>).
Nom complet code> la règle renvoie des instances de la classe code> nom code>, donc ce dont j'avais besoin dans ce cas était simplement: p>
Si vous faites accidentellement quelque chose de stupide comme $. $ Attribut code> où vous voulez dire
$ chose.Attribute code>, vous verrez également le
Attribut manquant de la règle Portée code> message d'erreur. (Je sais que cette question a été répondue il y a longtemps, mais ce bit de trivia pourrait aider quelqu'un d'autre qui voit le message d'erreur!) P>