2013-07-24 109 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

相關問題