J'ai un petit compilateur à écrire en javacc et je rencontre un problème: javacc semble reconnaitre le token le plus grand en priorité :/
Le code et l'erreur parle d'eux même je pense.
options {
STATIC = false ;
}
PARSER_BEGIN(Adder)
class Adder {
public static void main( String[] args )
throws ParseException, TokenMgrError {
Adder parser = new Adder( System.in ) ;
parser.Start() ; }
}
PARSER_END(Adder)
SKIP :
{
"\r"
}
TOKEN :
{
< NUMBER: (["0"-"9"])+ >
| < WORD : (~[" ","\n"])+ >
| < WORDS: (|" ")+ >
| < EOL: ("\n") >
}
void Start() :
{
int n;
Token t;
}
{
(t =
{
n = Integer.parseInt(t.image);
System.out.println(n);
}
" "
" "
)+
}
echo "123 mot1 mot2 mot3" | java Adder
Exception in thread "main" ParseException: Encountered " "123 mot1 mot2 mot3 "" at line 1, column 1.
Was expecting:
...
at Adder.generateParseException(Adder.java:190)
at Adder.jj_consume_token(Adder.java:128)
at Adder.Start(Adder.java:13)
at Adder.main(Adder.java:6)
Merci d'avance :)
# Correction
Posté par Watchwolf . Évalué à 2.
le code:
options {
STATIC = false ;
}
PARSER_BEGIN(Adder)
class Adder {
public static void main( String[] args )
throws ParseException, TokenMgrError {
Adder parser = new Adder( System.in ) ;
parser.Start() ; }
}
PARSER_END(Adder)
SKIP :
{
"\r"
}
TOKEN :
{
< NUMBER: (["0"-"9"])+ >
| < WORD : (~[" ","\n"])+ >
| < WORDS: (<WORD>|" ")+ >
| < EOL: ("\n") >
}
void Start() :
{
int n;
Token t;
}
{
(t = <NUMBER>
{
n = Integer.parseInt(t.image);
System.out.println(n);
}
" "<WORD>
" "<WORDS>
<EOL>
)+
<EOF>
}
le résultat:
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> ...
at Adder.generateParseException(Adder.java:190)
at Adder.jj_consume_token(Adder.java:128)
at Adder.Start(Adder.java:13)
at Adder.main(Adder.java:6)
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.