ANTLR на шумной поток данных Часть 2
-
29-09-2019 - |
Вопрос
После очень активного обсуждения с BART KIERS На разборке шумного DataStream с Antlr, Я заканчиваю с другой проблемой ...
Цель все еще такая же: только извлечение полезной информации со следующей грамматикой,
VERB : 'SLEEPING' | 'WALKING';
SUBJECT : 'CAT'|'DOG'|'BIRD';
INDIRECT_OBJECT : 'CAR'| 'SOFA';
ANY : . {skip();};
parse
: sentenceParts+ EOF
;
sentenceParts
: SUBJECT VERB INDIRECT_OBJECT
;
предложение вроде it's 10PM and the Lazy CAT is currently SLEEPING heavily on the SOFA in front of the TV.
сделает следующие
Это идеально, и он делает именно то, что я хочу .. С большого предложения, я извлекаю только слова, которые имели чувство для меня ... Но то, я основал следующую ошибку. Если где-то в тексте я представляю слово, которое начинается точно так же, как токен, я заканчиваю MismathedTokenException
или а noViableException
Это 10 вечера, а ленивый кот в настоящее время спят, с собачьей сумкой, на диване перед телевизором.
производить ошибку:
DOGGY
интерпретируется как начало для DOG
который также является частью токена SUBJECT
и лексер потерян ... Как я могу избежать этого без определения DOGGY
Как специальный токен ... я бы хотел, чтобы парсер понять DOGGY
как слово само по себе.
Решение
Ну, похоже, что добавляет это ANY2 :'A'..'Z'+ {skip();};
Решает мою проблему!