Forum général.général antlr, et le lexical nondeterminism

Posté par  (site web personnel) .
Étiquettes : aucune
0
25
juin
2005
Salut forum,
Je me suis mis à antlr, et je me casse déjà la nez (ce serait pas drôle sinon). J'ai donc suivi l'exemple "Cut and Paste" de la documentation, que j'ai voulu modifier un peu pour bien comprendre comment ça marche (et vu que je poste ici, c'est que c'est pas encore le cas).

Mon fichier t.g ressemble à ça :
class P extends Parser;

startRule
: a:ACTION
COMMA
n:NAME
{System.out.println(a.getText()+"la"+n.getText());}
;

class L extends Lexer;

// one-or-more letters followed by a newline
NAME: ( 'a'..'z'|'A'..'Z' )+ NEWLINE
;

NEWLINE
: '\r' '\n' // DOS
| '\n' // UNIX
;

ACTION: ( 'a'..'z'|'A'..'Z'|'0'..'9' )+
;

COMMA
: ','
;


Ce que je voudrais, c'est rentrer "couper pomme" et qu'il me sorte "couper la pomme" par exemple.
Toutefois quand je le passe au antlr, il me prévient que
ANTLR Parser Generator Version 2.7.4 1989-2004 jGuru.com
t.g: warning:lexical nondeterminism between rules NAME and ACTION upon
t.g: k==1:'A'..'Z','a'..'z'

Je sais pas de quoi il parle, ni comment résoudre ce problème...
  • # Ben, il y a ambiguité

    Posté par  (site web personnel) . Évalué à 3.

    Et antlr te le dis: les lexèmes ACTION et NAME peuvent commencer de la même manière, par une lettre. De plus, pour les deux, tu as un "+", donc augmenter le lookahead ne reglera pas le problème. La différence entre les action et les noms dans ton cas pourrait n'intervenir qu'au niveau du parsing, les deux étant le même genre de token. Par exemple, pas mal de systemes utilisent le meme lexème "identiofier" pour les noms de variables, de types et de fonctions. C'est le parseur ensuite qui fait la différence.
    • [^] # Re: Ben, il y a ambiguité

      Posté par  (site web personnel) . Évalué à 1.

      Merci pour ta réponse précise. Mais dans mon cas, je chercher à lui dire que c'est deux mots successifs séparés par un espace, dans l'ordre que je lui donne. Comme quand le tappe ls -A dans un shell, je tape pas -A ls. Dans ce cas comment préciser l'ordre, je me doute bien que c'est possible ?

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.