1

CommonTreeにvisit(OurVisitor visitor)メソッドを持たせたいのですが、CommonTreeは生成されたクラスではありません。

現在、このコードがあります

    ANTLRStringStream stream = new ANTLRStringStream(sql);
    NoSqlLexer lexer = new NoSqlLexer(stream);
    CommonTokenStream tokenStream = new CommonTokenStream(lexer);
    NoSqlParser parser = new NoSqlParser(tokenStream);  
    CommonTree tree = (CommonTree) parser.statement().getTree();

ツリーのウォーキングはいつでも外部化できますが、この場合はtree.visit(myVisitor)を呼び出して、ツリー内のノードごとにOurVisitor.visitNode(Node node)を呼び出すと便利です。これを行う方法はありますか?

また、expr =exprType1|がある場合のツリーを期待していました。exprtType2 | exprType3 *、私は持っていた木を持っているでしょう

ExprType1 exp1 = expr.getExprType1();
ExprType2 exp2 = expr.getExprType2();
List<ExprType3> exp3List = expr.getExprType3()

しかし、これはCommonTreeには当てはまりません。それをする方法はありますか?

ありがとう、ディーン

4

1 に答える 1

1

はい、ANTLRに独自のASTクラス(ANTLRのTreeクラスを拡張する必要があります!)を作成させて、カスタムメソッドを追加することができます。

このANTLRWikiの記事、特にカスタムASTノードタイプの使用の段落を参照してください。

ANTLRの次のメジャーリリースであるバージョン4は、自動AST構造を備えているため、歩きやすく、繰り返しやすくなります。

于 2012-07-06T18:19:38.183 に答える