2010-05-15 11 views
1

J'essaie d'écrire quelques règles simples et je reçois cette ambiguïtéantlr 3 ambiguïté

rule: field1 field2; //ambiguity between nsf1 and nsf2 even if I use lookahead k=4 

field1: nsf1 | whatever1...; 
field2: nsf2 | whatever2...; 

nsf1: 'N' 'S' 'F' '1'; //meaning: no such field 1 
nsf2: 'N' 'S' 'F' '2'; //meaning: no such field 2 
  1. Je comprends l'ambiguïté, mais je ne comprends pas pourquoi préanalyse ne résout pas cela.

  2. J'ai une solution simple mais je ne l'aime pas:

    règle

    : (NSF1 (NSF2 | whatever2)) | (quel que soit1 (nsf2 | quelquechose2));

Est-ce que quelqu'un a une solution plus élégante?

Merci beaucoup, Chris

Répondre

0

Je ne pouvais pas reproduire votre problème, mais tout ce que je pouvais faire était de deviner ce que les règles pour « whatever1 » et « whatever2 » étaient. Pouvez-vous poster une grammaire plus complète? Cependant, il n'y a rien dans la grammaire qui ne puisse être entièrement fait avec le jeton lexer plutôt qu'avec les règles de l'analyseur syntaxique. Essayez de mettre en majuscules tous les noms de règles pour les transformer en jeton lexer et voir si cela peut vous aider.

+0

faux problème en effet, il y avait une erreur dans ma description :-( merci – kcris