ANTLR в потоке данных с шумом. Часть 2 - PullRequest
1 голос
/ 01 декабря 2010

После очень интересной дискуссии с Бартом Киерсом о разборе зашумленного потока данных с помощью 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


    it's 10PM and the Lazy CAT is currently SLEEPING heavily, 
    with a DOGGY bag, on the SOFA in front of the TV.

выдачей ошибки:

alt text

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

1 Ответ

1 голос
/ 01 декабря 2010

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

...