私はantlr v4を使用して、他の目的でjavaプログラムの解析ツリーを抽出しています。私はこのサンプルから始めている:ANTLR v4 visitor sampleANTLR v4、JavaLexerとJavaParserがnullを解析木として返す
そして、私はそれが動作するかどうかを確認するために与えられたリンク上の手順をテストして、すべてが右に行って:
java Run
a = 1+2
b = a^2
c = a+b*(a-1)
a+b+c
^Z
Result: 33.0
そして私は、構造体としてJavaプログラムを解析するために自分自身を書きました以下:
|_Java.g4
|_Java.tokens
|_JavaBaseVisitor.java
|_JavaLexer.java
|_JavaLexer.tokens
|_JavaParser.java
|_JavaTreeExtractorVisitor.java
|_JavaVisitor.java
|_Run.java
そしてRun.javaは以下の通りです:
import org.antlr.v4.runtime.*;
import org.antlr.v4.runtime.tree.*;
public class Run {
public static void main(String[] args) throws Exception {
CharStream input = CharStreams.fromFileName("F:\\Projects\\Java\\Netbeans\\ASTProj\\JavaTreeExtractor\\prog.java");
JavaLexer lexer = new JavaLexer(input);
CommonTokenStream tokens = new CommonTokenStream(lexer);
JavaParser parser = new JavaParser(tokens);
ParseTree tree = parser.getContext();
JavaTreeExtractorVisitor calcVisitor = new JavaTreeExtractorVisitor();
String result = calcVisitor.visit(tree);
System.out.println("Result: " + result);
}
}
しかし、文ParseTree tree = parser.getContext();
では、ツリーオブジェクトはnullになります。 私はantlrに慣れていないので、私がチェックするか何か解決するための提案はありますか?
(さらに情報が必要な場合は、私に通知してください)。
TG。
'ParseTree tree = parser.compilationUnit();'はJavaファイルの解析の開始点になります。 (ここでJavaの文法を仮定すると(https://github.com/antlr/grammars-v4/blob/master/java/Java.g4)) –
@BilltheLizard thanks.makeその答えは+1できる –
@BilltheLizardそうです。これを回答として投稿してください。ありがとう。 – ConductedClever