2012-11-14 71 views
3

想象一下,我有以下規則。我想讓TYPE_ID爲可選項,但如果AST缺失,則將其替換爲AST中的某個默認值。如何用缺省值替換丟失的可選標記?

assignment : TYPE_ID? ID '->' expression 
TYPE_ID : ('A'..'Z')('a'..'z'|'A'..'Z'|'0'..'9')* ; 

例如我有以下代碼來解析,給出了上述規則,假定根據需要expression作品。

monday -> 1. 
Number tuesday -> 2. 

我想有AST有東西monday前面的樹在同一個地方,Number在接下來的樹出現。

我已經搜索和搜索,無法弄清楚如何做到這一點?

回答

3

你可以做到以下幾點:

tokens { 
    EMPTY; 
} 

assignment : TYPE_ID ID '->' expression -> ^(TYPE_ID ID '->' expression) 
      | ID   '->' expression -> ^(EMPTY ID '->' expression) 
      ; 
+0

這種運作良好,我只是不知道是否有實現同樣的事情 –

+1

@JarrodRoberson一個更簡潔的方式,沒有,沒有那麼詳細的辦法,據我所知。 (儘管我沒有發現它太冗長,但那只是我......) –