Все еще в процессе изучения ANTLR ... Недавно я разместил 2 вопроса относительно синтаксического анализа текста и извлечения информации, не считая «нежелательных» слов или символов. После очень интересного обсуждения с Бартом Кирсом анализа зашумленного потока данных Часть 1 и и разбор зашумленного потока данных Часть 2, я заканчиваю с еще одной проблемой ...
Изначально моя грамматика выглядела так
VERB : 'SLEEPING' | 'WALKING';
SUBJECT : 'CAT'|'DOG'|'BIRD';
INDIRECT_OBJECT : 'CAR'| 'SOFA';
ANY2 :'A'..'Z'+ {skip();};
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.
приведет к следующему
Это хорошо ... и он делает то, что я хочу, то есть извлекает только слова CAT
, SLEEPING
и SOFA
, оставляя в стороне другие слова. Теперь по другой причине мне нужно ввести новый токен в мою грамматику, назовем его OTHER : 'PLANE'
. Позже он будет использован другим правилом. Я все еще хочу, чтобы мое основное правило работало: SUBJECT VERB INDIRECT_OBJECT
. Допустим, в моем предложении есть токен 'PLANE'
, например
it's 10PM and the Lazy CAT on the PLANE is currently SLEEPING heavily on the SOFA in front of the TV.
Это приведет к следующей ошибке (здесь нет ничего удивительного, поскольку лексер имеет четкое определение PLANE в качестве токена)
Есть ли способ сообщить ANTLR, что если я ввожу правило sentenceParts
, меня интересуют только 3 определенных мною токена, а именно SUBJECT
, VERB
или INDIRECT_OBJECT
, даже если он встречает другой токен, не учитывать? Я хотел бы иметь возможность сделать это, не добавляя OTHER?
везде в этом правиле