J'ai une grammaire ANTLR très simple que j'essaie de faire fonctionner, mais qui échoue misérablement en ce moment. Apprécierais vraiment quelques conseils sur ce ...ANTLR - grammaire de base incluant des caractères inattendus?
root : (keyword|ignore)*;
keyword : KEYWORD;
ignore : IGNORE;
KEYWORD : ABBRV|WORD;
fragment WORD : ALPHA+;
fragment ALPHA : 'a'..'z'|'A'..'Z';
fragment ABBRV : WORD?('.'WORD);
IGNORE : .{ Skip(); };
Avec l'entrée de test suivant:
"some ASP.NET and .NET stuff. that work."
Je veut un arbre qui est juste une liste de nœuds de mots-clés,
"some", "ASP.NET", "and", ".NET", "stuff", "that", "work"
au moment où je reçois
"some", "ASP.NET", "and", ".NET", "stuff. that",
(pour une raison « » apparaît dans le dernier mot-clé, et il manque « travail »
Si je change la clause de ABBRV à
fragment ABBRV : ('.'WORD);
puis qui fonctionne très bien, mais je reçois mot-clé (asp) et mot-clé (.net) - séparément - mais j'ai besoin d'eux comme un seul jeton.
Toute aide que vous pouvez donner serait très appréciée.
Merci Wayne - ce qui est probablement un signe clair si mon manque d'expérience avec ANTLR - mais en utilisant ANTLRWorks je reçois NoViableAltExceptions sans la règle « Ignorer »? En outre, l'expression inattendue «stuff. That» revient en quelque sorte en tant que mot-clé plutôt qu'en tant que jeton ignorer? Et je ne comprends pas pourquoi? merci pour votre aide –