2013-07-24 71 views
1

任何人都可以帮助我理解在Lexer Vs Parser级别编写的规则的行为吗?编写词法分析器Vs解析器规则的指南

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

以上解析器规则返回的预期值TenGigabitEthernet时为​​访问,而当为ctx.BASIC_INTF_TYPE().getText()访问,在BASIC_INTF_TYPE()

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

返回null以下规则返回null有没有像put-的准则太多关键字替代解析器?对于上述词法分析规则,null如何返回有效?

回答

1

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

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

+0

我从来没有使用过这两个地方。您的回答指引我更多地了解伪令牌,谢谢! – callmeDP

相关问题