ANTLRWorksデバッガは、ツリー文法で正常に動作するはずです。正しくリコールするには、ANTLRコード生成ツールで「-debug」フラグ(Javaターゲットを使用しています)を使用し、次にツリーパーサーインスタンスを作成する場所で、ポートを使用するデバッグコンストラクタを使用する必要があります。引数。私の場合、デフォルトのポートは機能しませんでしたので、私は任意に35505を選択しました。
ANTLRWorksを起動し、ツリー文法を開き、[実行] - [デバッグリモート...]をクリックし、ポートをツリーパーサーのコンストラクタで使用されているのと同じ値で、実行中のアプリケーションにデバッガを接続できる必要があります。詳細は、ANTLR 3 Debugging FAQを参照してください。
は[
更新]は、Javaのターゲットを使用していると仮定すると(つまり、ケースはない場合、私たちに知らせて)、ここに入門に関するより詳細な情報があります:
あなたは非ツリーパーサーをテストしていますANTLRWorksには、文法ファイルからJavaコードを生成し、そのコードを使用して入力を解析する背後にあるプロセスがあります。独自のアプリケーションでパーサーを使用する場合は、ANTLR(具体的にはクラスorg.antlr.Tool
)を使用してアプリケーションに組み込むことができるJavaコードを生成する必要があります。 ANTLRWorksにはこのためのメニューオプションが用意されています。私のケースでは、私は文法からJavaコードを生成し、残りのアプリケーションがそれらを見つけることができる場所にそれらのJavaソースファイルを置く、antビルドファイルのターゲットを持っています。
<java classpath="${antlr.tool.classpath}" classname="org.antlr.Tool" failonerror="true">
<arg value="-o" />
<arg value="${antlr.out.dir}" />
<arg value="${grammar.dir}/GrammarName.g" />
</java>
あなたが生成されたソースコードに行きたいディレクトリを指すようにstringtemplate.jar
とantlr.jar
、およびantlr.out.dir
ニーズが含まれている必要がありantlr.tool.classpath
プロパティ(たとえば、build/antlr/src/org/myorg/antlr/parser
、場合あなたのパーサ:私のAntターゲットは次のようになります文法はパッケージorg.myorg.antlr.parser
を指定します)。
その後、あなたはあなたのアプリケーションの残りの部分をコンパイルするときに、あなたのような何かを使用することができます。
ここ
<javac destdir="${build.classes.dir}" debug="on" optimize="on" deprecation="${javac.deprecation}" source="${javac.source}" target="${javac.target}">
<classpath refid="stdclasspath"/>
<src path="${src.dir}" />
<src path="${antlr.src.dir}" />
</javac>
を、私たちは、antlr.src.dir
で(生成されたANTLRコードとともに(src.dir
に)我々のアプリケーションのソースをコンパイルこの例ではbuild/antlr/src
となります)。
あなたのアプリケーションで生成されたコードを使用する限り私は強くあなたがANTLRを使用するつもりならThe Definitive ANTLR Referenceのコピーを取得をお勧めします
String sourceText = "a + b = foo";
ANTLRStringStream inStream = new ANTLRStringStream(sourceText);
// your generated lexer class
MyLexer lexer = new MyLexer(inStream);
CommonTokenStream tokens = new CommonTokenStream(lexer);
// your generated parser class
MyParser parser = new MyParser(tokens);
// run the toplevel rule (in this case, `program`)
MyParser.program_return prog = parser.program();
// get the resulting AST (a CommonTree instance, in this case)
CommonTree tree = (CommonTree) prog.getTree();
// run a tree parser rule on the AST
MyTreeParser treeParser = new MyTreeParser(new CommonTreeNodeStream(tree));
treeParser.program();
:、外ANTLRWorks)、あなたのような何かをする必要があります。このすべてはかなり徹底的にカバーされており、始めるための例がたくさんあります。
私はFAQをかなり徹底的に調べたが、このページを見逃してしまったと思った。私は今それを読んで、私がかなり近いと思う。まだ動作しません。 「ANTLRコード生成ツールを「-debug」フラグ(Javaターゲットを使用している)で使用する必要がある場合は、ツリーパーサーインスタンスを作成する場所を選択する必要があります。 。コード生成にコマンドラインANTLRを使用していますか?私はこのコードをどこに作成しているのか、ツリー以外のパーサのコードがどのように動いているのかは分かりません。 –