2010-12-01 48 views
1

在与巴特煮布锅on parsing a noisy datastream with ANTLR,我结束了另外一个问题非常interesing讨论...ANTLR在嘈杂的数据流,第2部分

的目标仍然是相同的:只与以下提取有用信息语法,

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

这是完美的,它正在做我想要的东西..从一个大句子,我只提取对我有意义的词......但是,我创建了以下错误。如果某处文字我介绍的是开始酷似令牌的话,我结束了一个MismathedTokenExceptionnoViableException

 

    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定义为特殊标记,我该如何避免这种情况...我希望解析器能够在下面tand DOGGY本身就是一个词。

回答

1

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