[Javacc] reconnaissance token le plus grand

reconnaissance token le plus grand [Javacc] - Java - Programmation

Marsh Posté le 14-11-2008 à 19:33:42    

:hello:  
 
J'ai un petit problème avec javacc que j'avait déjà eu il y a quelques années avec d'autres outils (sans doute lex&yacc). JavaCC me reconnait le token utilisant le plus de caractères possibles.  
 
Voici 3 tokens

TOKEN :
{
     < NUMBER: (["0"-"9"])+ >
|    < WORD : (~[" "])+ >
|    < WORDS: (<WORD>|" " )+ >
}


 
et je demande à javaCC de trouver un <NUMBER>.  
Si je lui passe comme chaine "12 3\n", il va alors reconnaitre un WORDS "12 3\n".
Si je rajoute dans le token WORD que je ne veut pas de "1", il va alors me trouver le NUMBER "12" puis le WORD "3\n"
 
Je comprend plus ou moins le prolbème mais je ne voit pas comment le résoudre  :(

Reply

Marsh Posté le 14-11-2008 à 19:33:42   

Reply

Marsh Posté le 17-11-2008 à 18:06:46    

personne n'a d'idée :(
 
Le code complet desfois que ...
 

Code :
  1. options {
  2.       STATIC = false ;
  3. }
  4. PARSER_BEGIN(Adder)
  5.       class Adder {
  6.            public static void main( String[] args )
  7.            throws ParseException, TokenMgrError {
  8.                 Adder parser = new Adder( System.in ) ;
  9.                 parser.Start() ; }
  10.       }
  11. PARSER_END(Adder)
  12. SKIP :
  13. {
  14.     "\r"
  15. }
  16. TOKEN :
  17. {
  18.      < NUMBER: (["0"-"9"])+ >
  19. |    < WORD : (~[" ","\n"])+ >
  20. |    < WORDS: (<WORD>|" " )+ >
  21. |    < EOL: ("\n" ) >
  22. }
  23. void Start() :
  24. {
  25.     int n;
  26.     Token t;
  27. }
  28. {
  29.     (t = <NUMBER>
  30.     {
  31.         n = Integer.parseInt(t.image);
  32.         System.out.println(n);
  33.     }
  34.     " "<WORD>
  35.     " "<WORDS>
  36.     <EOL>
  37.     )+
  38.     <EOF>
  39. }


 
et le message d'erreur

Citation :

echo "123 mot1 mot2 mot3" | java Adder
Exception in thread "main" ParseException: Encountered " <WORDS> "123 mot1 mot2 mot3 "" at line 1, column 1.
Was expecting:
    <NUMBER> ...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed