任何人都可以帮助我理解在Lexer Vs Parser级别编写的规则的行为吗?
basicInterfaceType
: ('Port-channel' | 'fortyGigE' | 'TenGigabitEthernet' | 'GigabitEthernet')
;
当以TenGigabitEthernet
访问时,上述解析器规则返回了预期值ctx.basicInterfaceType().getText()
,而以null
访问时,以下规则返回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
返回如何对上述词法分析器规则有效?
答案 0 :(得分:1)
当getText()
返回null时,通常意味着未使用您查询的子规则或令牌(在输入中未找到)。可能在第二种情况下,它被匹配为不同的令牌。词法分析器的顺序很重要;当它无法决定匹配哪个标记时,它会与语法文件中首先出现的标记一起使用。解析器规则更灵活 - 您定义的规则可以匹配包含指定文本的任何令牌。
我假设你没有同时定义这两个,我当然可以看到令人困惑的结果。您的解析器规则定义了伪令牌,这些伪令牌出现在其他词法分析器规则之前,因此可能会阻止您的令牌规则能够匹配。