2012-06-16 23 views
5

Tôi đang tìm kiếm một phân tích cú pháp có thể trích xuất các phương pháp từ một lớp java (mã nguồn tĩnh -> java tập tin) và chữ ký phương pháp, ý kiến ​​/ tài liệu, các biến của mỗi phương pháp. Tốt hơn trong ngôn ngữ lập trình Java.phân tích cú pháp đang tĩnh cho Java mã nguồn để trích xuất các phương pháp/comments

Ai đó có thể xin tư vấn?

Cảm ơn.

+0

Trích xuất theo định dạng nào? Bạn có thể chỉ cần chạy công cụ Javadoc và xử lý HTML được tạo. –

+0

Đối với tôi API nếu chúng có sẵn, sẽ hữu ích hơn, getMethodNames, getComments, getDocumentation v.v. Ngoài ra, Javadoc sẽ không cung cấp cho tôi các biến riêng được khai báo bên trong phương thức, tên của các phương thức được gọi từ phương thức v.v. –

+0

tìm kiếm là một [phân tích tĩnh] đầy đủ (http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis#Java). –

Trả lời

8

Bạn có thể sử dụng ASTParser bởi nhật thực. Siêu đơn giản của nó để sử dụng.

Tìm một độc lập ví dụ nhanh here.

+0

Vâng tôi đã kiểm tra điều đó. Có cách nào để có được "ý kiến" bên trong các phương pháp bằng cách sử dụng ASTParser? –

+0

ASTParser thực hiện khai báo một nút có tên là "Comment". Bạn chỉ có thể đọc javadoc của nó –

+1

CompilationUnit cho commentList, nhưng tôi không thể nhận được các bình luận thực tế. ví dụ: nếu nhận xét là // hello world, kết quả đầu ra chỉ // –

1

Nếu tất cả bạn muốn là văn bản chính xác của từng phương pháp, và các văn bản chính xác của các biến bên trong phương pháp này, bạn có thể nhận được bởi với một cú pháp mà tạo ra một CST, đi bộ trên CST để tìm các nút bên phải, và sau đó in đẹp các subtrees tìm thấy. ANTLR has a Java parser sẽ hoạt động cho việc này. Tôi không biết nếu nó sẽ nắm bắt ý kiến. Tôi nghĩ phân phối chính của ANTLR được mã hóa bằng Java.

Bạn có thể làm điều này hackily hơn, trong Java, với một lexer cho Java, thực hiện những gì Số tiền để một phân tích cú pháp đảo xấu trông cho các cụm từ khóa. ("Sau khi" lớp học ', tìm' {'và in ra mọi thứ bạn tìm thấy cho phù hợp'} '"sẽ cung cấp cho bạn tất cả các phương pháp và các lĩnh vực).

Nếu bạn muốn chi tiết chính xác hơn (ví dụ: bạn muốn biết loại đối số thực tế thay vì chỉ tên của nó hoặc loại thực sự được xác định), bạn sẽ cần trình phân tích cú pháp có tên giao diện người dùng độ phân giải. (ANTLR sẽ không làm điều này.) Các Eclipse JDT chắc chắn xây dựng cây; nó có khả năng phân giải tên. DMS Software Reengineering Toolkit của chúng tôi với Java Front End của chúng tôi có thể cung cấp mọi thứ cần thiết cho nhiệm vụ này, bao gồm cả nhận xét và trích xuất. DMS không được mã hóa bằng Java.

Bạn phản đối Javadoc như là không đầy đủ, bởi vì nó không cung cấp cho bạn nội dung của phương pháp này. Có lẽ Java Source Browser của chúng tôi cung cấp cho bạn mã đó, sẽ phục vụ tốt hơn. Nó tích hợp dữ liệu phân giải tên từ DMS/Java Front End của chúng tôi để siêu liên kết thông tin kiểu JavaDoc vào văn bản nguồn có thể duyệt; tất cả các trường cũng như các biến cục bộ được lập chỉ mục một cách rõ ràng. Trình duyệt nguồn không được mã hóa bằng Java, nhưng có lẽ bạn chỉ muốn chạy nó và loại bỏ kết quả của bạn. Cào như vậy có thể khó hơn nó xuất hiện nhìn chằm chằm vào màn hình; có rất nhiều HTML đằng sau màn hình như vậy.

4

Dưới đây là những gì tôi làm để trích xuất chữ ký phương pháp từ một file java/s:

tôi sử dụng Sublime Text 2, đến tập tin tôi muốn có được chữ ký từ và làm một tìm Ctrl + F với biểu hiện thường xuyên đặt ra cho Regex sau tôi thực hiện (tôi đã thử nghiệm nó trên mã của tôi và nó hoạt động, tôi hy vọng nó sẽ làm việc cho bạn quá)

((synchronized +)?(public|private|protected) +(static [a-Z\[\]]+|[a-Z\[\]]+) [a-Z]+\([a-Z ,\[\]]*\)\n?[a-Z ,\t\n]*\{) 

sau Sublime Text 2 nêu bật kết quả của tôi tôi bấm vào "Find All" sau đó sao chép Ctrl +C, mở một tab mới Ctrl +N và dán Ctrl +V.
Sau đó, bạn sẽ thấy tất cả các phương thức chữ ký của mình.

Tôi hy vọng điều đó sẽ hữu ích.

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