Używam antlr v4 do wyodrębniania drzewa parsowania programów java do innych celów. Zacząłem od tej próbki: ANTLR v4 visitor sampleANTLR v4, JavaLexer i JavaParser zwracające wartość NULL jako drzewo parsowania
A ja testowałem czynności na danym łączu, aby sprawdzić czy to działa i wszystko już w porządku:
java Run
a = 1+2
b = a^2
c = a+b*(a-1)
a+b+c
^Z
Result: 33.0
A potem napisałem mój własny do analizowania programów java jako struktura poniżej:
|_Java.g4
|_Java.tokens
|_JavaBaseVisitor.java
|_JavaLexer.java
|_JavaLexer.tokens
|_JavaParser.java
|_JavaTreeExtractorVisitor.java
|_JavaVisitor.java
|_Run.java
a Run.java jest jak poniżej:
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);
}
}
Ale na oświadczeniu ParseTree tree = parser.getContext();
obiekt drzewa uzyskuje wartość pustą. Jako że jestem nowy w Antlr, wszelkie sugestie do sprawdzenia lub rozwiązania?
(Jeśli potrzebujesz więcej informacji, po prostu powiadom mnie).
TG.
'ParseTree tree = parser.compilationUnit();' byłby punktem wyjścia do parsowania pliku Java. (Zakładając gramatykę Java [tutaj] (https://github.com/antlr/grammars-v4/blob/master/java/Java.g4)) –
@BilltheLizard thanks.make to odpowiedź, więc mogę dać jej +1 –
@ BilltheLizard to prawda. Proszę zaksięguj to jako odpowiedź. Dzięki. – ConductedClever