2016-07-28 15 views
0

Wasantlr4 Regel Knoten ein Elternteil und Regelklasse

<T extends ParserRuleContext> List<T> 
T getRuleContext(Class<? extends T> ctxType) 

der Punkt der ParserRuleContext der dieser Methode ist gegeben, wenn ich versuchen, diese Methode ein Kind Kontext eines Elternteils zu erhalten verwenden es immer null zurück. zum Beispiel

parentRuleContext.getRuleContext(ChildOneContext.class,MyParser.Rule_ChildOne) 

dieses Ich gehe davon sollten alle ChildOneContexts zurück, aber immer null zurück.

Bin ich falsch mit dieser Methode und ihr Zweck ist etwas anderes? Da gibt es keine Dokumentation darüber, nicht klar über die Verwendung.

Antwort

0

getRuleContext soll das i-te Kind (aus der Variante mit dem Parameter i) oder alle Kinder eines bestimmten Klassentyps zurückgeben. Wenn du null zurückbekommst, würde ich sagen, dass du kein Kind des gegebenen Typs hast. Sie können dies leicht überprüfen, indem Sie das children Mitglied untersuchen und sehen, ob ein ChildOneContext Kind existiert.

+0

Danke Mike. Später stellte ich fest, dass diese Methode nur verwendet werden kann, um die Kinder zu finden. Was ich suchte, ist eine Methode so etwas wie root.getRuleContextIncludingDecendants (Context.class) –

+0

Ah, ich sehe, eine rekursive Suche. Nun, die Implementierung ist einfach und so sollten Sie eine rekursive Variante schreiben. Übrigens, wenn Sie denken, dass die Antwort Ihnen geholfen hat, nehmen Sie es bitte an. Sie können es auch unabhängig upvoten, wenn Sie denken, dass es das wert ist. –