Bonjour,
Je suis confronté à un petit problème. J'utilise pour la première fois cup (avec jflex), et il semble ne pas réduire ma règle de départ sauf si elle est suivie d'un EOF envoyé par jflex (c'est à dire fin de fichier). Ça marche donc très bien s'il lit un fichier, mais j'ai envie de faire un interpréteur pour un mini-ml, et donc d'analyser une phrase directement dans la console. La fin d'une phrase syntaxique devrait se terminer par ";;". Or ça ne lui suffit pas, il veut absolument que le ";;" soit suivi d'un CTRL-D pour interpréter en console.
Voici la règle initiale :
implementation ::=
expression:e SEMISEMI {: /*...*/ :}
| LET IDENTIFIER:id EQUAL expression:e SEMISEMI {: /* code */ :}
| LET REC IDENTIFIER:id EQUAL expression:e SEMISEMI {: /* code */ :}
J'ai essayé de faire des feintes, comme ajouter le terminal EOF, ou bien envoyer le token EOF quand je lex la chaine ";;", mais cela crée d'autres problèmes.
J'ai l'impression que le token ";;" est lu comme lookahead, mais qu'il a besoin de EOF pour effectuer la réduction.
Y aurait-il une âme charitable pour me dépanner ?
note : jflex est en mode de compatibilité %cup.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.