2013-02-21 35 views
4

我正在擴展ANTLR4中的監聽器,並且我想要獲取與解析器中的特定規則相關聯的所有標記,有沒有一種方法可以做到這一點?ANTLR4:獲取監聽器中特定規則的標記列表

myConfiguration: CONFIG EQUALS parameters ; 
parameters: ALPHANUMERIC+ 

CONFIG: 'config' ; 
ALPHANUMERIC: [a-zA-Z0-9] ; 

我怎麼能告訴我的聽衆查找的CONFIGEQUALS值進入myConfiguration解析規則時?

是否有我可以使用的某種循環?

for(all tokens in this rule) { 
    System.out.println(token.getText()); 
} 

我可以看到有就是通過解析類令牌的列表,但我不能找到它與當前規則相關的令牌的列表。

我問這個問題的原因是爲了避免重新輸入我在Listener AND語法中需要的令牌名稱。通過這樣做,我可以檢查是否已經找到該特定規則中的每個令牌類型,而無需手動輸入名稱。

回答

7

這可能是你要找的。

List<TerminalNode> terminalNodes = new ArrayList<TerminalNode>(); 
for (int i = 0; i < context.getChildCount(); i++) { 
    if (context.getChild(i) instanceof TerminalNode) { 
     terminalNodes.add((TerminalNode)context.getChild(i)); 
    } 
} 
+0

我試了一下代碼,它給了我在分析樹中找到的標記的值。我正在尋找一種方法來獲取在解析規則中可用的常量標記名稱,如果可能的話,應該可以在解析樹行走之前獲取它們。即myConfiguration規則應該爲我提供:CONFIG EQUALS參數的標記 - 以標記的形式,而不是我可以從中提取其名稱的值。上面給出的例子取決於輸入而不是詞法分析器。我正在尋找匹配任何特定規則之前匹配的實際令牌。 – Har 2013-02-22 09:56:35

+0

這似乎是讓聽衆儘可能獨立於語法的唯一方法。 – Har 2013-02-27 11:13:23