1
我有一个文件,我想忽略它的一部分。在Lexer中,我使用门控语义谓词来避免为文件的无趣部分创建令牌。我的规则类似于以下内容。Antlr多余的谓词需要?
A
: {!ignore}?=> 'A'
;
START_IGNORE
: 'foo' {ignore = true; skip();}
;
END_IGNORE
: 'oof' {ignore = false; skip();}
;
IGNORE
: {ignore}?=> . {skip();}
;
但是除非我改变的开始和结束也使用语义谓词(如下),这是行不通的..
A
: {!ignore}?=> 'A'
;
START_IGNORE
: {true}?=> 'foo' {ignore = true; skip();}
;
END_IGNORE
: {true}?=> 'oof' {ignore = false; skip();}
;
IGNORE
: {ignore}?=> . {skip();}
;
为什么我添加的谓词?
编辑:我使用ANTLR-3.4
我使用Eclipse插件编译等,但不是插件提供的解释器。从命令行编译我得到了和以前相同的结果,所以在我的代码中有一些奇怪的东西。通常我会接受我得到的解决方案,但还有其他一些问题。我会尽力找出造成这种行为的原因。 – 2012-07-09 20:40:21
@HeinrichOdy,如果您使用的是v3.4,请尝试恢复到v3.3:根据我的经验,v3.3的问题较少。 – 2012-07-09 20:43:55
请看我是否可以轻松更改版本,如果是的话,会尝试3.3,谢谢。 – 2012-07-09 20:49:23