我正在使用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();
上,樹對象爲空。 由於我是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