有人能帮助我理解在Lexer和Parser级别编写的规则的行为吗?
basicInterfaceType
: ('Port-channel' | 'fortyGigE' | 'TenGigabitEthernet' | 'GigabitEthernet')
;上面的解析器规则在作为ctx.basicInterfaceType().getText()访问时返回期望值TenGigabitEthernet,而以下规则在作为ctx.BASIC_INTF_TYPE().getText()访问时返回null,在BASIC_INTF_TYPE()时返回null
BASIC_INTF_TYPE
: ('Port-channel' | 'fortyGigE' | 'TenGigabitEthernet' | 'GigabitEthernet')
;有没有类似于在解析器中放入太多关键字的指导方针?对于上面的词法分析器规则,null返回是如何有效的?
发布于 2013-08-16 09:35:46
当getText()返回null时,通常意味着您要查询的子规则或令牌未被使用(在输入中未找到)。可能在第二种情况下,它被作为不同的令牌进行匹配。词法分析器规则的顺序很重要;当它不能决定匹配哪个标记时,它会选择语法文件中最先出现的那个。解析器规则更加灵活--按照您定义的方式,它可以匹配任何包含指定文本的标记。
我假设你没有同时定义这两种方法,我可以肯定地看到这会产生令人困惑的结果。您的解析器规则定义了出现在其他词法分析器规则之前的伪令牌,因此可能会阻止您的令牌规则能够匹配。
https://stackoverflow.com/questions/17836054
复制相似问题