与Bart Kiers进行了非常相关的讨论 用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 或a 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 这也是令牌的一部分 SUBJECT lexer丢了...我怎么能避免这种情况而不定义 DOGGY 作为一个特别的令牌...我希望解析器能理解 DOGGY 作为一个单词本身。

有帮助吗?

解决方案

好吧,似乎添加了这个 ANY2 :'A'..'Z'+ {skip();}; 解决我的问题!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top