尝试升级antlr4,我在语法中有2行产生错误信息:
分配给不是一组的块的标签tok
特别是对于如下所示的语法行:
contextRadius: tok=('radius' 'change-authorize-nas-ip') (IP4_ADDRESS|IP6_ADDRESS) 'encrypted' 'key' ID 'port' INT_TOK 'event-timestamp-window' INT_TOK 'no-reverse-path-forward-check'
;
这究竟意味着什么 - 成为“未设置的块”并且是否有一般解决方案?
不正确的标签如下:
tok=('radius' 'change-authorize-nas-ip')
在这种情况下,ANTLR不知道是否分配令牌 'radius'
或者令牌 'change-authorize-nas-ip'
到标签 tok
。从ANTLR 4开始,不会生成语义不清晰的代码,而是产生错误。您要删除标签 tok
或将其移动到预期的项目。换句话说,使用以下三种形式之一。
('radius' 'change-authorize-nas-ip')
(tok='radius' 'change-authorize-nas-ip')
('radius' tok='change-authorize-nas-ip')
在语法块中允许标签的原因是支持如下项目。这个街区是一个 组,这意味着内容可以折叠为与一组固定的允许令牌中的一个令牌完全匹配。然后将该组匹配的特定项目分配给 x
。
x=('a' | 'b')