你会如何翻译使用ANTLR 3到4 ANTLR代码的这一部分?
expr: (Identifier '.')=> (refIdentifier)
| (Identifier '!')=> (refIdentifier)
| (Identifier '=>')=> (lambdaExpression);
我的意思是这种语义谓词似乎现在并不存在。 我应该怎么使用呢?
你会如何翻译使用ANTLR 3到4 ANTLR代码的这一部分?
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]+
;
随着山姆哈威尔提到的意见:
语义谓词{...}? 在V4像门语义断言工作V3一样。 从V3非门控的谓词没有一个对口的ANTLR 4。