2014-09-12 95 views
1

ANTLR有沒有將某些標記標記爲標準輸出的方法?標記ANTLR中的標記文本

例如,給定的語法(摘錄)

words : FOO BAR BAZ 
FOO : [Ff] [Oo] [Oo] 
BAR : [Bb] [Aa] [Rr] 
BAZ : [Bb] [Aa] [Zz] 
SP : [ ] -> channel(HIDDEN); 

words將匹配 「FOO BAR BAZ」, 「富酒吧巴茲」, 「富酒吧巴茲」 等

當我打電話TokenStream#getText(Context),它會將令牌的實際文本連接在一起。

有沒有一種方法來「規範化」這個輸出,使得無論什麼輸入,所有FOO令牌呈現爲「富」,BAR令牌渲染爲「欄」,並BAZ令牌呈現爲「巴茲」(例如)?

鑑於上面的任何輸入,我想要輸出「Foo Bar Baz」。

回答

2

任何下列選項將工作:

  1. 實現自己的方法來獲取解析樹或標記的範圍中的文本,並將其放置於某些已知的標記類型有處理。

  2. 創建自己的Token類,知道返回某些令牌的規範形式,並創建一個TokenFactory實現,創建該類型的令牌。然後使用setTokenFactory方法使您的詞法分析器生成這些令牌。

  3. 創建自己的覆蓋默認行爲的TokenStream實現。

  4. 明確指定一個動作之前創建令牌的運行文本:

    FOO : [Ff] [Oo] [Oo] { _text = "Foo"; }; 
    

其他選項可能可用。