Có thể truy cập AST của động cơ v8, đối với mã JavaScript đã cho không? Tôi đang làm việc trên Máy phân tích tĩnh JavaScript sử dụng công cụ V8.Truy cập cây cú pháp trừu tượng của động cơ V8
Trả lời
này là khá cũ nhưng có lẽ câu trả lời giúp ai đó vấp phải điều này. Câu trả lời là có, giả sử bạn sẵn sàng sửa đổi V8 và biên dịch phiên bản của riêng bạn.
Nếu vậy, thì trong compiler.cc bạn tìm một chỗ nơi MakeCode được gọi suốt MakeFunctionInfo mà biến đổi AST được lưu trữ trong các thông qua trong đối tượng CompilationInfo thành code gốc. Bạn cần phải viết một lớp kế thừa từ AstVisitor sau đó bạn có thể kiểm tra việc AST bằng cách chèn các dòng sau đây trước khi cuộc gọi đến MakeCode:
MyAstVisitor mAV;
// this will call VisitFunctionLiteral in your AST visitor
info->function()->Accept(mAV);
Như V8 biên dịch chức năng just-in-time khi họ đang thực sự được gọi, có một vị trí khác trong CompileLazy nơi bạn sẽ phải thực hiện tương tự để có được AST của chúng trong suốt quá trình thực thi các tập lệnh gọi.
Vì điều biên dịch lười biếng, điều này có thể sẽ không cho phép bạn thực hiện phân tích tĩnh, bởi vì quá trình thực hiện đã diễn ra trước khi bạn có quyền truy cập vào các AST cho các công cụ được biên dịch một cách lười biếng. Nhưng đây là cách để có được AST.
Sử dụng --print-ast
qua SetFlagsFromString
Tôi nghĩ OP muốn truy cập vào AST như một cơ sở dữ liệu mà anh ta có thể thu thập thông tin. Đúng, anh ta có thể xuất khẩu như thế này và xây dựng đầu đọc AST của riêng mình, và thu thập dữ liệu cấu trúc dữ liệu của riêng mình, nhưng tôi nghi ngờ anh ta muốn tránh sự vụng về đó nếu có thể. –
Bạn có biết lá cờ đó vẫn còn tồn tại không? –
Vâng, tôi không biết những gì bạn muốn đạt được, nhưng có vẻ như bạn muốn thay đổi AST từ bên trong C++ mã (hoặc có thể viết các lớp wrapper cho bối cảnh Javascript cho họ là tốt?).
Tôi đề nghị để có một cái nhìn tại các tập tin tiêu đề mà khá giải thích gì đó để được sử dụng trên AST V8 của:
http://v8.googlecode.com/svn/trunk/src/ast.h
~ Chúc mừng
- 1. Cây cú pháp trừu tượng là gì?
- 2. Thao tác động cơ V8
- 3. Chuyển đổi cây cú pháp trừu tượng sang mã byte
- 4. Làm cách nào để giảm cây phân tích cú pháp của tôi thành cây cú pháp trừu tượng?
- 5. Tải động của biểu thức cú pháp trừu tượng Haskell
- 6. Làm cách nào để thiết kế các phần của cây cú pháp trừu tượng?
- 7. Cách sử dụng Reader Monad khi duyệt qua một cây cú pháp trừu tượng
- 8. Lấy biểu đồ luồng điều khiển từ Cây cú pháp trừu tượng
- 9. Định dạng chuẩn cho cây cú pháp cụ thể và trừu tượng
- 10. Khi nào nên sử dụng cây cú pháp trừu tượng hoặc cụ thể?
- 11. Clang: AST (cây cú pháp trừu tượng) trông như thế nào?
- 12. Tạo một cây cú pháp trừu tượng cho mã nguồn java bằng cách sử dụng ANTLR
- 13. Phương pháp trừu tượng ghi đè phương pháp trừu tượng
- 14. Sử dụng API cú pháp trừu tượng của CDT để tạo/viết mã C?
- 15. Tóm tắt Cú pháp đại diện cây trong C++
- 16. Thư viện nguồn mở để truy cập cơ sở dữ liệu trừu tượng trong C++?
- 17. Truy cập hàm tạo từ lớp cơ sở trừu tượng với sự phản chiếu
- 18. Django: Truy vấn một lớp cơ sở trừu tượng
- 19. Lỗi trong động cơ V8 V8 của JavaScript khi khớp với dòng đầu tiên?
- 20. Chạy Động cơ Javascript V8 Standalone
- 21. C# Phương pháp chung trừu tượng
- 22. phương pháp chung trong lớp trừu tượng
- 23. Lớp cơ sở hoặc trợ giúp trừu tượng
- 24. Lớp hoặc Lớp cơ sở trừu tượng?
- 25. Các lớp cơ sở trừu tượng lớn
- 26. Scala: Trait Mixin với Lớp cơ sở trừu tượng
- 27. “Không thể khởi tạo lớp trừu tượng ... với các phương pháp trừu tượng” trên lớp học mà không cần phải có bất kỳ phương pháp trừu tượng
- 28. Cú pháp để truy cập các thuộc tính đối tượng PHP là gì?
- 29. Tăng các đặc tính phân tích cú pháp của cây bất động sản và Xml
- 30. Truy cập số dòng trong V8 JavaScript (Chrome & Node.js)
có thể trùng lặp của [Làm thế nào để tôi truy cập v8 phân tích cây làm thế nào nó có thể được thực hiện?] (Http://stackoverflow.com/questions/8550774/how-do-i-access-v8-parse-tree-how- có thể làm được) – zengr