Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2373 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [ANTLR] Lexical non-determinism

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[ANTLR] Lexical non-determinism

n°1049799
Chronoklaz​m
Posté le 16-04-2005 à 17:58:29  profilanswer
 

Salut, voila j'ai un probleme avec le lexer de antlr (pour java). Je voudrais pouvoir specifier deux tokens distincts ENTIER et FLOTTANT qui sont tout à fait valables dans d'autres lexers.
 

Code :
  1. ///////////////////////////////////////////////////////
  2. protected
  3. CHIFFRE :        '0'..'9' ;
  4. ///////////////////////////////////////////////////////       
  5. ENTIER :        (CHIFFRE)+ ;
  6. ///////////////////////////////////////////////////////
  7. FLOTTANT:        ENTIER '.' ENTIER ;
  8. ///////////////////////////////////////////////////////


 
Et j'ai l'erreur suivante :
 

Citation :


ANTLR Parser Generator   Version 2.7.5 (20050201)   1989-2005 jGuru.com
test.g: warning:lexical nondeterminism between rules ENTIER and FLOTTANT upon
test.g:     k==1:'0'..'9'


 
 
Quelqu'un as t'il deja rencontré se probleme dans antlr ?


---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
mood
Publicité
Posté le 16-04-2005 à 17:58:29  profilanswer
 

n°1050263
Chronoklaz​m
Posté le 17-04-2005 à 20:12:55  profilanswer
 

N'utilisez pas se parseur ! Il pue (faut une grammaire EBNF pour que ca marche) ! JavaCUP est 10 fois mieux !
 
EDIT : C'est du LL(k) cette grosse DAUBE ! :fou:  :fou:  :fou:


Message édité par Chronoklazm le 17-04-2005 à 21:12:38

---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
n°1050694
the real m​oins moins
Posté le 18-04-2005 à 14:19:43  profilanswer
 

un bel avis d'expert que nous avons là [:totozzz]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1050705
gizmo
Posté le 18-04-2005 à 14:27:27  profilanswer
 

met ton k à 2, ca devrait passer.

n°1050731
Chronoklaz​m
Posté le 18-04-2005 à 14:38:08  profilanswer
 

Mon k est à 7 pour le parser et à 4 pour le lexer. Le probleme n'est pas là.  
 
Ce parseur est en LL(k) recurive gauche, cette approche est beacoup plus restrictive que du LALR(1) comme YACC ou BISON.  
 
On ne peut y pas preciser les priorites sur les operateurs donc pour s'en sortir il faut avoir une grammaire dans laquelle les priorités sont IMPLICITES. Ce qui est "un poil" contraignant.


Message édité par Chronoklazm le 18-04-2005 à 14:39:04

---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
n°1050818
gizmo
Posté le 18-04-2005 à 15:16:32  profilanswer
 

Code :
  1. header {
  2. package zzz.test;
  3. }
  4. class TestLexer extends Lexer;
  5. options {
  6. k=1; // 1 Token look ahead
  7. }
  8. ///////////////////////////////////////////////////////  
  9. protected
  10. CHIFFRE    :        '0'..'9'    ;
  11. ///////////////////////////////////////////////////////   
  12. protected   
  13. ENTIER    :        (CHIFFRE)+    ;
  14. ///////////////////////////////////////////////////////  
  15. protected
  16. FLOTTANT:         ENTIER '.' ENTIER ;
  17. ///////////////////////////////////////////////////////
  18. ENTIER_OR_FLOTTANT:
  19.  (ENTIER '.') => FLOTTANT {$setType(FLOTTANT);}
  20.  | ENTIER {$setType(ENTIER);}
  21. ;
  22. class TestParser extends Parser;
  23. parse:
  24.  ENTIER_OR_FLOTTANT
  25. ;


c'est vrai que c'est un poil contraignant [:kiki]


Message édité par gizmo le 18-04-2005 à 15:16:48
n°1051004
Chronoklaz​m
Posté le 18-04-2005 à 17:00:01  profilanswer
 

Moi je recupere simplement un token NOMBRE : (DIGIT)+ ('.' ((DIGIT)+))? ; et dans le TreeWalker je fait la difference si il y un point ou pas ...
 
Pour ce qui est de "un poil contraignant" : je parlais surtout du PARSER et pas du LEXER.
 
C'est carrement moins intuitif et plus dur de faire une grammaire reconnue LL(k) que d'en faire une LALR(1) ...  :hello:
 
EDIT : Exemple du probleme du "-" et "+" uniare ... faut creer des token imaginaires, renommer les "-" et "+" binaires, verifier que les priorites dans ta grammaires sont bonnes ... enfin tout un blbla alors qu'avec bison tu donne juste la priorité tu le fout n'importe ou et on en parle plus.


Message édité par Chronoklazm le 18-04-2005 à 17:06:13

---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
n°1051009
gizmo
Posté le 18-04-2005 à 17:03:19  profilanswer
 

bah oui, bah c'est pas plus ou moins intuitif qu'un autre. Ca dépend juste de la manière dont on t'a appris à penser les grammaires.

n°1055669
Chronoklaz​m
Posté le 21-04-2005 à 20:33:52  profilanswer
 

Hoy ! Toi qui à l'air de gerer ANTLR, dis moi pourquoi ca explose ca ?  
 

Code :
  1. AST test = (AST)(new CommonAST((Token)(new CommonToken(INT,"3" ))));
  2.   test.setFirstChild(test);
  3.   (test.getFirstChild()).setNextSibling(test);
  4.   System.out.println("____________________________> " + test.toStringTree());


 
Ca balance une exception : antlr.BaseAST.toStringList(BaseAST.java:342)
 
J'en peux plus là ... 6 heures de squattage sur des problemes comme ca, y a de quoi s'aligné tous les gars de ANTLR à la Kalash  :fou:  :fou:  :fou:


---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
n°1055789
gizmo
Posté le 21-04-2005 à 21:48:53  profilanswer
 

Faudrait que je regarde le code d'antlr pour être sûr, mais j'ai l'impression qu'il essaye simplement d'éviter un cycle.


Message édité par gizmo le 21-04-2005 à 21:49:09

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [ANTLR] Lexical non-determinism

 

Sujets relatifs
Auriez-vous de la doc sur l'API java d'ANTLR?Analyseur lexical / syntaxique
Plus de sujets relatifs à : [ANTLR] Lexical non-determinism


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)