2017-06-13 30 views
1

我是ANTLR的新手。我才發現,原來這是可能的標記每個替代在生產像這樣:爲什麼ANTLR要求標記全部或者沒有選項?

foo 
    : a # aLabel 
    | b # bLabel 
    | // ... 
    ; 

不過,我覺得不愉快的是全或無的選擇必須貼有標籤。我最近只需要爲20多家分公司標註2種產品的替代品,而我最終爲其他產品標註了# stubLabel。是否有任何理由說明爲什麼所有標籤都沒有標籤?

回答

3

只要你添加一個標籤ANTLR4將不再生成該規則對每個ALT上下文類,而是個別的上下文類。這不能混合使用(例如,對於整個規則以及僅在某些alt中同時存在上下文)。一旦開始使用標籤並且不再生成規則上下文,則必須爲所有的alt生成上下文,否則將會丟失某些內容。

1

好的,我相信我已經想通了。假定爲了節省空間,與每個標籤相對應的節點從與生產相對應的節點被分類,而不是它的孩子。

expression 
    : // ... 
    | foo # namedMethodInvocation 
    ; 

成爲

相關問題