您如何将这部分用 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 中没有对应的谓词。