Вопрос

После очень активного обсуждения с 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. сделает следующие

alt text

Это идеально, и он делает именно то, что я хочу .. С большого предложения, я извлекаю только слова, которые имели чувство для меня ... Но то, я основал следующую ошибку. Если где-то в тексте я представляю слово, которое начинается точно так же, как токен, я заканчиваю MismathedTokenException или а noViableException

 Это 10 вечера, а ленивый кот в настоящее время спят, с собачьей сумкой, на диване перед телевизором.

производить ошибку:

alt text

DOGGY интерпретируется как начало для DOG который также является частью токена SUBJECT и лексер потерян ... Как я могу избежать этого без определения DOGGY Как специальный токен ... я бы хотел, чтобы парсер понять DOGGY как слово само по себе.

Это было полезно?

Решение

Ну, похоже, что добавляет это ANY2 :'A'..'Z'+ {skip();}; Решает мою проблему!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top