2012-11-20 41 views
1

我正在使用ANTLR構建AST。我想要寫一個,這個字符串匹配生產:ANTLR:重寫規則中的文本標記

${identifier} 

在我的語法文件我有:

reference 
    : DOLLAR LBRACE IDENT RBRACE -> ^(NODE_VAR_REFERENCE IDENT) 
; 

這工作得很好。我使用自己的適配器來發射樹節點。 使用的重寫規則爲我創建了兩個節點:一個用於NODE_VAR_REFERENCE,另一個用於IDENT

我想要做的只是創建一個節點(對於NODE_VAR_REFERENCE令牌),並且此節點的「標記」字段中必須具有IDENT標記。

這可能使用重寫規則嗎?謝謝。

回答

2

那麼,讓IDENT成爲節點NODE_VAR_REFERENCE的標誌意味着根本沒有任何NODE_VAR_REFERENCE。令牌由類型(NODE_VAR_REFERENCEIDENT)和此令牌匹配的一些文本組成。要讓樹節點的令牌變爲IDENT意味着類型的文本將是IDENT(丟失NODE_VAR_REFERENCE令牌或類型)的文本。

什麼你大概的意思就是與NODE_VAR_REFERENCE類型和IDENT文本單個節點,在這種情況下,你可以做這樣的事情:

reference 
: DOLLAR LBRACE IDENT RBRACE -> NODE_VAR_REFERENCE[$IDENT.text] 
; 
+0

這就是我的意思。謝謝。 – Antonio

+0

不客氣@Antonio。 –