Bạn có thể sử dụng trình phân tích cú pháp C hiện có cho Java. Nó không nhiều hơn phân tích cú pháp các tập tin tiêu đề, tất nhiên, nhưng điều đó không làm tổn thương bạn.
Chúng tôi sử dụng trình phân tích cú pháp từ dự án Eclipse CDT. Đây là một trình cắm thêm Eclipse, nhưng chúng ta sử dụng thành công nó bên ngoài Eclipse, chúng ta chỉ cần gộp 3 tệp JAR của Eclipse với trình phân tích cú pháp JAR.
Để sử dụng trình phân tích cú pháp CDT, hãy bắt đầu với việc triển khai org.eclipse.cdt.core.model.ILanguage
, ví dụ: org.eclipse.cdt.core.dom.ast.gnu.c.GCCLanguage
. Bạn có thể gọi số getTranslationUnit
trên đó, chuyển mã và một số công cụ trợ giúp. Một tệp mã được thể hiện bằng một cá thể org.eclipse.cdt.core.parser.FileContent
(ít nhất là trong CDT7, điều này dường như thay đổi rất nhiều). Cách dễ nhất để tạo đối tượng như vậy là FileContent.createForExternalFileLocation(filename)
hoặc FileContent.create(filename, content)
. Bằng cách này bạn không cần phải quan tâm đến công cụ Eclipse IFile
, mà dường như chỉ hoạt động trong các dự án và không gian làm việc.
Số IASTTranslationUnit
bạn lấy lại thể hiện toàn bộ AST của tệp. Tất cả các nút trong đó là các trường hợp của các loại IASTSomething
, ví dụ: IASTDeclaration
v.v. Bạn có thể triển khai lớp con của riêng mình là org.eclipse.cdt.core.dom.ast.ASTVisitor
để lặp qua AST bằng cách sử dụng mẫu khách truy cập. Nếu bạn cần trợ giúp thêm, chỉ cần hỏi.
Tệp JAR chúng tôi sử dụng là org.eclipse.cdt.core.jar
, org.eclipse.core.resources.jar
, org.eclipse.equinox.common.jar
và org.eclipse.osgi.jar
.
Sửa: Tôi đã tìm thấy một bài báo trong đó có chứa đoạn mã nguồn cho điều này: "Sử dụng các dụng cụ Eclipse C/C Phát triển ++ như một mạnh mẽ, đầy đủ chức năng, tích cực duy trì ứng dụng nguồn mở C++ Parser", nhưng nó là không còn trực tuyến nữa (chỉ như một phiên bản rút gọn).
Nguồn
2012-04-24 15:04:55
trang hướng dẫn cho lex và yacc (flex và bò rừng) có thể giúp –
Điểm tốt, tôi quên mất yacc. Tôi đã hy vọng sẽ có một giải pháp hiện tại cho việc này. Nhưng tôi đoán tôi có thể tạo trình phân tích cú pháp phát trực tuyến của riêng tôi bằng cách sử dụng yacc. – PhilW
@PhilW, bạn đã tạo trình phân tích cú pháp chưa? Tôi cần phải phân tích C Header chứa các định nghĩa tiền xử lý (chỉ là hằng số nguyên). Tôi cần phải lấy các hằng số này từ ứng dụng C Header tới Java. Tất nhiên tôi đang tìm một số giải pháp đã sẵn sàng trước khi triển khai giải pháp của riêng tôi =) –