标签x分配给不是一组的块

joe*_*itt 13 antlr4

尝试升级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'
    ;
Run Code Online (Sandbox Code Playgroud)

这究竟意味着什么 - 成为一个"未设置的块"并且是否有一般解决方案?

Sam*_*ell 12

不正确的标签如下:

tok=('radius' 'change-authorize-nas-ip')
Run Code Online (Sandbox Code Playgroud)

在这种情况下,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')
Run Code Online (Sandbox Code Playgroud)

在语法块中允许标签的原因是支持如下项目.该块是一个集合,意味着可以折叠内容以精确匹配来自固定的一组允许令牌的一个令牌.然后将该组匹配的特定项目分配给x.

x=('a' | 'b')
Run Code Online (Sandbox Code Playgroud)