我想插入新的節點到解析樹,我的解析器剛剛訪問樹時。該位置可能是當前節點的父節點或兄弟節點,或者剛好在它之前,因此我需要通過調用ParseRuleContext
中的getParent
和getChild
方法來檢查是否存在與新節點的規則名稱相匹配的節點。 getParent
返回ParseRuleContext
,但getChild
返回ParseTree
。爲什麼這兩種方法返回不同的類型?爲什麼getChild方法在ANTLR4中返回ParseTree而不是ParseRuleContext?
順便說一句,當前節點也應該由新節點替換。
在分析樹上實現這種修改的最好方法是什麼?謝謝!
感謝您的解釋!所以我需要通過檢查它的實例(使用'instanceof')將這個孩子轉換成'ParserRuleContext'。 –
通常您會使用生成的存取方法。例如,如果你有一個規則'foo:bar;',而不是使用'if(fooContext.getChild(1)instanceof BarContext)',你可以使用'if(fooContext.bar()!= null)'。 –
是的,我在訪問樹時使用它。但在另一種情況下,我需要搜索特定節點以插入另一個新節點。搜索時我不知道這些節點內部是什麼。 –