你如何将ANTLR 3中编写的这部分代码翻译成ANTLR 4?
expr: (Identifier '.')=> (refIdentifier)
| (Identifier '!')=> (refIdentifier)
| (Identifier '=>')=> (lambdaExpression);
Run Code Online (Sandbox Code Playgroud)
我的意思是这种语义谓词现在似乎不存在.我可以用什么呢?
Bar*_*ers 14
在ANTLR V4,不再有门语义断言,{ ... }?=>以及也有不再句法断言的,( ... )=>因为在V4使用的解析算法可以解决模糊性(需要这样的断言不再需要).所以,这应该适合你:
expr
: refIdentifier
| refIdentifier
| lambdaExpression
;
Run Code Online (Sandbox Code Playgroud)
请注意,v4中只有一种类型的谓词:语义谓词,{ ... }?.例如,如果需要检查令牌的内容,可以这样做:
id_capitals_only
: {_input.LT(1).getText().matches("[A-Z]+")}? ID
;
ID
: [a-zA-Z]+
;
Run Code Online (Sandbox Code Playgroud)
正如Sam Harwell在评论中提到的那样:
语义谓词{...}?在V4中的工作就像V3中的门控语义谓词一样.来自V3的非门控谓词在ANTLR 4中没有对应的谓词.
| 归档时间: |
|
| 查看次数: |
6409 次 |
| 最近记录: |