1

谁能帮助我理解在 Lexer Vs Parser 级别编写的规则的行为?

basicInterfaceType 
    : ('Port-channel' | 'fortyGigE' | 'TenGigabitEthernet' | 'GigabitEthernet')
;

上述解析器规则TenGigabitEthernet在访问 as 时返回预期值,ctx.basicInterfaceType().getText()而以下规则null在访问 as 时返回ctx.BASIC_INTF_TYPE().getText()null返回时间为BASIC_INTF_TYPE()

BASIC_INTF_TYPE
    : ('Port-channel' | 'fortyGigE' | 'TenGigabitEthernet' | 'GigabitEthernet')
;

有没有像 put-too-many-keyword-alternatives-at-parser 这样的指南?null上述词法分析器规则的返回值如何?

4

1 回答 1

1

getText()返回 null 时,通常意味着您正在查询的子规则或令牌未使用(在输入中未找到)。可能在第二种情况下,它被匹配为不同的令牌。词法分析器规则的顺序很重要;当它无法决定匹配哪个标记时,它会与语法文件中第一个出现的标记一起使用。解析器规则更加灵活——按照您定义的方式,它可以匹配任何包含指定文本的标记。

我假设您没有同时定义这两个,我当然可以看到结果令人困惑。您的解析器规则定义了伪标记,它们出现在其他词法分析器规则之前,因此可能会阻止您的标记规则能够匹配。

于 2013-08-16T01:35:46.407 回答