ANTLR4 中的语义谓词



如何将用ANTLR 3编写的这部分代码转换为ANTLR 4?

expr: (Identifier '.')=> (refIdentifier)
  | (Identifier '!')=> (refIdentifier)
  | (Identifier '=>')=> (lambdaExpression);

我的意思是这种语义谓词现在似乎不存在了。我可以用什么代替?

在 ANTLR v4 中,不再有门控语义谓词,{ ... }?=> ,也不再有句法谓词( ... )=>,因为 v4 中使用的解析算法可以解决歧义(不再需要这样的谓词)。因此,这应该对您有用:

expr
 : refIdentifier
 | refIdentifier
 | lambdaExpression
 ;

请注意,v4 中只有一种谓词类型:语义谓词{ ... }? 。例如,如果您需要检查令牌的内容,则可以这样做:

id_capitals_only
 : {_input.LT(1).getText().matches("[A-Z]+")}? ID
 ;
ID
 : [a-zA-Z]+
 ;

编辑

正如Sam Harwell在评论中提到的:

V4 中的语义谓词 {...}? 的工作方式与 V3 中的门控语义谓词类似。V3 中的未解态谓词在 ANTLR 4 中没有对应项。

相关内容

  • 没有找到相关文章

最新更新