2016-11-10 94 views
0

我使用的是ANTLR4框架,這是我的語言的片段檢索標記的類型:ANTLR如何使用遞歸

r 
    : RN             #RNName 
    | 'DLRRelationIntersectionOf' LPAREN r COMMA r RPAREN #RIntersection 
    | 'DLRRelationUnionOf' LPAREN r COMMA r RPAREN   #RUnion 

正如你所看到的,RN是一個終端節點,所以我可以很容易地處理它。但r是非終端節點,因此它可能非常複雜,如DLRRelationUnionOf(RN1,DLRRelationIntersectionOf(RN2,RN3))。 我的目標是處理r節點並遞歸查找RN。 的問題是,一旦在類似的代碼retrive規則R:

DLRParser.RContext recursiveRule = ctx.r(); 

我怎麼能看着recursiveRule找出問題的RN?

回答

1

在運行過程中,解析器會創建一個解析樹(如果啓用,這是默認設置)。分析樹是匹配項目的樹形表示。該樹由ParserRuleContext個實例組成,每個實例都具有子代表,該子代表匹配順序中該規則中的匹配項目。因此,對於您的r上下文,匹配第二個alt時,可以找到6個子節點(一個用於文字,一個用於LPAREN,一個用於第一個子r等)。您可以使用這些子上下文訪問子條目。如果匹配RN,則在第一個子項中有一個終端節點。