J'utilise antlr4 python et courir dans quelque chose de bizarre avec ce Gammar simple,erreur Antlr avec un non-terminal vide-possible apparaît deux fois dans une alternative
emptytest : (COMMA | empty empty nonempty) EOF ;
empty : SEMICOLON* ;
nonempty : DOT+ ;
DOT : '.' ;
SEMICOLON : ';' ;
COMMA : ',' ;
En entrée « ... », je suis arrivé erreur ligne 1: 0 entrée non concordante '.' J'attends {';', ','}
Mais si je laisse tomber un 'vide', ou abandonne 'COMMA |' de la règle, pas d'erreur. Je me demande pourquoi l'entrée '...' ne peut pas être interprétée comme vide (= '') vide (= '') nonempty (= '...')?
Merci pour toute idée.
Merci pour l'explication. Cependant, il n'y a pas d'avertissement sur l'ambiguïté. Tout ce que j'ai vu est –
Merci pour l'explication. Cependant, il n'y a pas d'avertissement sur l'ambiguïté, car il n'y a pas d'ambiguïté sur l'entrée '...'. Cependant, même si elle était ambiguë, il semble plus raisonnable pour Antlr de l'analyser le long d'une des possibilités, avec un avertissement, au lieu d'échouer sur une entrée légitime. En fait, l'Antlr4 que j'utilise fait quelque chose comme ça - il a choisi le premier choix sur l'ambiguïté: Sur l'entrée '; ...', cet arbre d'analyse a été généré. (videtest (vide;) vide (non vide ...)) sans avertissement –