После очень интересной дискуссии с Бартом Киерсом о разборе зашумленного потока данных с помощью 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
it's 10PM and the Lazy CAT is currently SLEEPING heavily,
with a DOGGY bag, on the SOFA in front of the TV.
выдачей ошибки:
DOGGY
интерпретируется как начало для DOG
, который также является частью TOKEN SUBJECT
, и лексер потерян ... Как можно избежать этого без определения DOGGY
как особый знак ... Я бы хотел, чтобы парсер понимал DOGGY
как само слово.