在与Bart Kiers on parsing a noisy datastream with 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
的一部分而且词法分析器丢失了...如果不定义{{1}我怎么能避免这种情况作为一个特殊的令牌......我希望解析器能够将DOGGY
理解为一个单词。
答案 0 :(得分:1)
好吧,似乎添加此ANY2 :'A'..'Z'+ {skip();};
解决了我的问题!