2009-09-16 25 views
11

Chúng ta cần tạo mã nguồn Java. Chúng tôi làm điều này bằng cách mô hình hóa cây cú pháp trừu tượng và có một khung cây tạo ra văn bản mã nguồn thực tế. Điều này tất cả đều tốt.Tạo mã phân tích cú pháp java và đánh giá nó để thử nghiệm

Kể từ khi mã AST của tôi hơi cũ, nó không có hỗ trợ cho chú thích và generics. Vì vậy, tôi đang tìm kiếm các dự án mở để sử dụng cho các dự án tương lai có nhu cầu tạo mã. Và đây là nơi vấn đề thực sự xuất hiện. Chúng tôi muốn kiểm tra xem mã được tạo có hành vi đúng hay không.

Đây là nơi tôi có ý tưởng thực sự đánh giá AST thay vì tạo mã nguồn java, biên dịch nó và chạy thử nghiệm đối với mã đó. Một người đánh giá sẽ tăng tốc các bài kiểm tra đơn vị, và người ta có thể đánh giá các phần nhỏ hơn của mã được tạo ra, chẳng hạn như chỉ một phương pháp, làm cho "các đơn vị" hợp lý hơn.

Cho đến nay tôi đã tìm thấy dự án com.sun.codemodel mà có vẻ khá tốt đẹp như là một hiện đại (hỗ trợ cho java5 và 6 tính năng) AST dựa trên giải pháp tạo mã.

Bất cứ ai cũng biết nếu có một dự án khác cho phép tôi đánh giá trực tiếp các phần của AST (chẳng hạn như một phương thức được tạo)?

+1

+1 câu hỏi thú vị, chúng tôi muốn câu trả lời ngay bây giờ :-) – KLE

+1

Tôi chỉ tạo mã cho phương thức đó, biên dịch và thử nghiệm. Việc tạo một thông dịch viên là khá nhiều công việc. –

+0

là không có tùy chọn để làm cho cây javac phát ra cây phân tích và đại diện trung gian và các công cụ? (loại độ phân giải, tra cứu lớp học, bất cứ điều gì Ira Baxter nói trong câu trả lời của họ). –

Trả lời

2

Để đánh giá Java, bạn cần tất cả các phân tích ngữ nghĩa mà đi cùng với nó ("phạm vi định danh này là gì? Kiểu gì nó có?") Cũng như một thông dịch viên. Để có được phân tích ngữ nghĩa đó, bạn cần nhiều hơn chỉ là AST: bạn cần độ phân giải tên đầy đủ (xây dựng bảng biểu tượng) và độ phân giải kiểu (xác định kiểu biểu thức và xác nhận rằng biểu thức hợp lệ trong ngữ cảnh mà chúng được tìm thấy), cũng như lớp tra cứu (phương pháp thực tế không foo tham khảo?)

với điều đó, bạn có thể xem xét xây dựng một thông dịch viên bằng cách bò trên các cây cối để thực hiện. Bạn cũng sẽ cần phải xây dựng một trình quản lý lưu trữ; bạn có thể không cần phải làm một bộ thu gom rác đầy đủ, nhưng bạn sẽ cần một cái gì đó. Bạn cũng sẽ cần một thông dịch viên cho các tệp .class nếu bạn thực sự muốn chạy một cái gì đó, có nghĩa là bạn cần một trình phân tích cú pháp (và tên/loại độ phân giải cho các tệp lớp).

Tôi không biết liệu Eclipse có tất cả điều này hay không (ít nhất là phần trình quản lý bộ nhớ bạn có thể nhận miễn phí :). Tôi mong đợi nó, bởi vì thiết kế ban đầu của nó là để hỗ trợ phát triển Java, nhưng tôi đã thất vọng rất nhiều bởi rất nhiều công cụ trong những năm qua.

DMS Software Reengineering Toolkit cũng là một phân tích/chuyển đổi chương trình xử lý nhiều ngôn ngữ. Nó có đầy đủ Java front end bao gồm phân tích cú pháp, xây dựng AST, xây dựng bảng biểu tượng và độ phân giải tên, loại độ phân giải, xây dựng biểu đồ cuộc gọi (cần thiết để giải quyết các cuộc gọi chức năng ảo) và có trình đọc tệp .class để khởi động với độ phân giải tên. Vì vậy, nó sẽ là một nền tảng tốt để xây dựng một thông dịch viên.

DMS cũng có thể xây dựng các AST tùy ý, sau đó tạo mã nguồn từ chúng, vì vậy nó cũng sẽ xử lý việc tạo mã kết thúc, tốt thôi.

[Lý do DMS tồn tại là phần "rất thất vọng"].

2

Tôi không chắc đây có phải là những gì bạn đang tìm kiếm hay không, nhưng dự án JDT của Eclipse cung cấp một cái nhìn rất tốt về AST Java (bao gồm các tính năng Java 5 và 6). Nó có một loạt các tiện ích và công cụ để xem/viết lại mã (không nhất thiết phải tạo). Tất cả chúng đều được cấp phép theo Giấy phép Công cộng Eclipse.

Bạn có thể nhận được thêm thông tin tại http://eclipse.org/jdt/

+1

Vâng, đó là một trong những và codemodel của Sun dường như là lựa chọn tốt nhất để tạo mã bằng cách xây dựng ASTs. Nhưng những gì tôi muốn ngoài ra, là khả năng diễn giải AST (với ngữ nghĩa sau khi biên dịch Java). – Christian

+0

JDT Core (tại http://www.eclipse.org/jdt/core/index.php) quảng cáo như sau: "Hỗ trợ đánh giá trong trang sổ lưu niệm hoặc ngữ cảnh trình gỡ lỗi". Tôi sẽ cho nó một cái nhìn ... –

Các vấn đề liên quan