Tôi đang sử dụng antlr v4 để trích xuất cây phân tích cú pháp của các chương trình java cho các mục đích khác. Tôi đã bắt đầu từ mẫu này: ANTLR v4 visitor sampleANTLR v4, JavaLexer và JavaParser trả về null làm phân tích cú pháp cây
Và tôi đã thử nghiệm các bước trên liên kết đưa ra để kiểm tra xem nó hoạt động và tất cả mọi thứ đi đúng:
java Run
a = 1+2
b = a^2
c = a+b*(a-1)
a+b+c
^Z
Result: 33.0
Và sau đó tôi đã viết của riêng tôi để phân tích các chương trình java như kết cấu dưới đây:
|_Java.g4
|_Java.tokens
|_JavaBaseVisitor.java
|_JavaLexer.java
|_JavaLexer.tokens
|_JavaParser.java
|_JavaTreeExtractorVisitor.java
|_JavaVisitor.java
|_Run.java
Và Run.java như sau:
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);
}
}
Nhưng tại tuyên bố ParseTree tree = parser.getContext();
đối tượng cây bị vô hiệu. Vì tôi mới dùng antlr, có đề xuất nào để tôi kiểm tra hay giải pháp nào không?
(Nếu cần thêm thông tin, chỉ cần thông báo cho tôi).
TG.
'ParseTree tree = parser.compilationUnit();' sẽ là điểm bắt đầu để phân tích cú pháp tệp Java. (Giả sử ngữ pháp Java [ở đây] (https://github.com/antlr/grammars-v4/blob/master/java/Java.g4)) –
@BilltheLizard thanks.make đó là câu trả lời, vì vậy tôi có thể +1 nó –
@BilltheLizard đúng. Vui lòng đăng bài này dưới dạng câu trả lời. Cảm ơn. – ConductedClever