У меня есть очень простая ANTLR-грамматика, которую я пытаюсь получить, но в настоящее время терпит неудачу. Будет действительно оценить некоторые указатели на это ...ANTLR - базовая грамматика, включая неожиданные персонажи?
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(); };
Со следующим входом тест:
"some ASP.NET and .NET stuff. that work."
Я хотел дерево, которое просто список узлов ключевых слов,
"some", "ASP.NET", "and", ".NET", "stuff", "that", "work"
на данный момент я получаю
"some", "ASP.NET", "and", ".NET", "stuff. that",
(по какой-то причине «» появляется в течение последнего ключевого слова, и он пропускает „работу“
Если изменить положение ABBRV к
fragment ABBRV : ('.'WORD);
то, что работает хорошо, но я получаю ключевое слово (осина) и ключевое слово (.net) - отдельно - но я нуждаюсь в них в качестве единственного токена.
Любая помощь, которую вы можете дать, будет высоко оценена.
Благодаря Wayne - это, вероятно, явный признак того, если моя неопытность с ANTLR - но с использованием ANTLRWorks я получаю NoViableAltExceptions без правила «Игнорировать»? Кроме того, неожиданная фраза «материал. Что» как-то возвращается как ключевое слово, а не токен игнорирования? И я не понимаю, почему? благодарит за вашу помощь –