在ANTLR4语义断言?(Semantic predicates in ANTLR4?)

2019-07-04 08:47发布

你会如何翻译使用ANTLR 3到4 ANTLR代码的这一部分?

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

我的意思是这种语义谓词似乎现在并不存在。 我应该怎么使用呢?

Answer 1:

在ANTLR V4,不再有门语义断言{ ... }?=>并且也有不再语法谓词 ( ... )=>因为在V4使用的解析算法可以解决歧义(不再需要这样的谓词的需要)。 所以,这应该只是为你工作:

expr
 : refIdentifier
 | refIdentifier
 | lambdaExpression
 ;

请注意,在V4只是一种类型的谓词: 语义断言{ ... }? 。 如果您需要检查一个令牌的内容,例如,你可以做这样的:

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

ID
 : [a-zA-Z]+
 ;

编辑

随着山姆哈威尔提到的意见:

语义谓词{...}? 在V4像门语义断言工作V3一样。 从V3非门控的谓词没有一个对口的ANTLR 4。



文章来源: Semantic predicates in ANTLR4?
标签: antlr antlr4