2017-08-11 12 views
1

私はこの形式で生成されたツリーを印刷しようとしています:ANTLR4:便利なフォーマットでツリーを印刷する方法

picture

は、だから私はのノードについての情報をассеssを持っている必要があります木。私は自分のテキストを取得するために、サブ木やtree.getChild(int childNumber).getText()メソッドにアクセスするためにtree.getChild(int childNumber)メソッドを使用することができますが、私は、ノードに関する情報を取得することはできません

public static void main(String[] args) throws Exception{ 
    CharStream cs = new ANTLRFileStream("test.txt"); 
    ExampleLexer lexer = new ExampleLexer(cs); 
    TokenStream tokens = new CommonTokenStream(lexer); 
    ExampleParser parser = new ExampleParser(tokens); 
    ParseTree tree = parser.mainRule(); 
} 

(私はタイプを知っている必要があります:私は次のようにそれを生成しますトークン(ノードがトークンである場合)とルール名(トークンでない場合))。どうやってやるの?

ありがとうございます。

答えて

0

ノードタイプがノードクラスとして「コード化」されています...実際にTokenを表すものはTermninalRuleImplです。

あなたはgetSymbol()Tokenにアクセスすることができますので、そのようなことは動作するはずです:

if(node instanceof TerminalNodeImpl) { 
    Token representedToken = ((TerminalNodeImpl) node).getSymbol(); 
} 

あなたはトークンタイプを必要とする場合は、吐き出しますTokengetType()メソッドを使用して、それを確認することができますパーサークラスの定数として定義されている数値。

+0

回答ありがとうございます:) – sibstudent1

関連する問題