0
Cet exemple ANTLR n'analyse pas l'entrée "1;" . Pouvez-vous expliquer pourquoi? Il analyse "11".Cet exemple antlr ne fonctionne pas correctement
grammar TestGrammar;
options {
output=AST;
}
expr: mexpr (PLUS^ mexpr)* SEMI!;
mexpr: atom (STAR^ atom)*;
atom: INT;
LPAREN: '(';
RPAREN: ')';
STAR: '*';
PLUS: '+';
SEMI: ';';
protected
DIGIT: '0'..'9';
INT: (DIGIT)+;
WS: (' ' | '\t' | '\n' | '\r') {
$channel = HIDDEN;
};
Confirmé, modification protégée en fragment. – Pindatjuh
J'ai compris. Explication: Le mot clé protégé fonctionne dans les versions antérieures d'ANTLR. Il ne fonctionne pas dans ANTLR 3. Maintenant, il faut utiliser fragment instread de protected. Protected est probablement ignoré dans ANTLR 3. Que se passe-t-il? ANTLR interprète INT et DIGIT comme un jeton. Comme ils sont très similaires, l'analyse échoue. En utilisant fragment, DIGIT n'est plus un jeton. Fragment dit que DIGIT fait partie d'une règle ou d'un autre jeton. Ensuite, l'exemple commence à fonctionner. – Aftershock