2013-05-03 93 views
2

考慮下面的詞法規則ANTLR4的文本表示:ANTLR:獲得一分詞法規則

ID: [a-z]+; 
INT: [0-9]+; 
ARRAY: ID '[' INT ']'; 

是否有可能在樹上行走的場景,我必須ctx.ARRAY()(其中ctxParserRuleContext一個子類訪問這是由解析器規則生成的)獲取詞法規則的文本表示IDINT? 我目前使用ctx.ARRAY().getText()獲取整個文本表示,並使用正則表達式解析IDINT的內容,並且只是想知道ANTLR提供了一個「更簡潔」的開箱即用解決方案。

注意:由於外部依賴關係造成ARRAY解析器規則不是一個選項。

非常感謝您提供有意義的答案。

回答

3

ANTLR 4中的詞法規則不能被分解成若干部分。這是我們作爲ANTLR 4詞法分析器超過ANTLR 3詞法分析器的巨大速度和內存改進的一部分而作出的設計決策。 ANTLR 3詞法分析器是遞歸下降識別器,具有許多與解析器相同的功能。在ANTLR 4中,詞法分析器不過是支持語義謂詞的DFA識別器,所以根本不跟蹤令牌各個組件之間的邊界。

您需要將ARRAY作爲解析器規則,或者在需要分解令牌文本時分別解析getText()的結果。

+0

好吧,然後我保留我的正則表達式:-) 感謝您的快速回答。 – 2013-05-03 14:24:09