2010-03-06 34 views
5

Có thư viện nào cho Python sẽ cho phép tôi phân tích mã C++ không?Mã Python để phân tích cú pháp và kiểm tra C++

Ví dụ, giả sử tôi muốn phân tích cú pháp một số mã C++ và tìm tên của tất cả các lớp và các hàm/biến thành viên của chúng.

Tôi có thể nghĩ ra một số cách để kết hợp nó với nhau bằng cách sử dụng cụm từ thông dụng, nhưng nếu có thư viện hiện tại thì sẽ hữu ích hơn.

+0

chỉnh sửa: Tôi không ngụ ý rằng bằng cách sử dụng cụm từ thông dụng, tôi có thể phân tích cú pháp C++ đúng cách, điều đó sẽ vô lý vì đó là ngôn ngữ không thường xuyên. Tôi có nghĩa là cho những gì tôi cần một regex có thể đủ. – Mike

+0

Ngay cả đối với trường hợp giới hạn đó, tôi nghi ngờ bạn có thể làm điều đó với một regex một mình. Có lẽ nếu bạn thu hẹp nó xuống các lớp đơn giản, cư xử tốt mà không có ma thuật macro hoặc mẫu (và có lẽ không có thừa kế). – jalf

+0

Bạn đã thử http://eli.thegreenplace.net/2011/07/03/parsing-c-in-python-with-clang/? – refi64

Trả lời

7

Trước đây tôi đã sử dụng cho các mục đích như vậy gccxml (trình phân tích cú pháp C++ phát ra XML dễ phân tách) - Tôi đã hack các giao diện Python của riêng mình, nhưng bây giờ có một gói pygccxml. bạn.

+0

pygccxml trông tuyệt vời, tôi đã không nhận thấy nó trước đây. –

0

Làm thế nào về pyparsing?

+1

Từ trang web đó: "Mô-đun pyparsing là một cách tiếp cận khác để tạo và thực thi các ngữ pháp đơn giản". 1) C++ không có ngữ pháp "đơn giản". 2) Hầu hết mọi người cố gắng xây dựng trình phân tích cú pháp C++ đơn giản là không thành công; một công việc lớn hơn nhiều mà bạn có thể tưởng tượng. –

+1

Tôi biết không thể phân tích cú pháp C++ một cách chính xác với pyparsing, nhưng tác giả của câu hỏi này không xây dựng một trình biên dịch cho C++ theo như tôi biết, vì vậy pyparsing có thể là đủ cho anh ta. Hãy để anh ta là thẩm phán. –

+0

sẽ không hữu ích vì tôi sẽ phải tự mình viết một ngữ pháp đơn giản. cảm ơn đề xuất – Mike

4

Phân tích chính xác C++ là năm ánh sáng từ thứ bạn có thể làm với cụm từ thông dụng. Bạn cần một trình phân tích cú pháp C++ đầy đủ và chúng khá khó xây dựng. Tôi đã tham gia xây dựng một vài năm qua và theo dõi ai đang làm việc đó; Tôi không biết bất kỳ ai đang cố gắng thử trong Python.

Tôi đang làm việc là DMS C++ Front End. Nó cung cấp không chỉ phân tích cú pháp, nhưng tên đầy đủ và độ phân giải loại. Sau khi phân tích cú pháp, bạn về cơ bản có thể trích xuất thông tin chi tiết về mã ở bất kỳ mức chi tiết nào bạn thích, bao gồm chi tiết về nội dung hàm.

Bạn có thể xem xét sử dụng GCCXML, trong đó có chứa một trình phân tích cú pháp và sẽ tạo ra, tôi tin rằng tên của tất cả các lớp, hàm và các biến cấp cao nhất. GCCXML sẽ không cung cấp cho bạn bất kỳ thông tin nào về những gì bên trong một chức năng.

+0

+1 cho gccxml ... đang tìm kiếm chính xác những gì tôi cần. – Mike

1

Đây là một chút nằm ngoài phạm vi câu hỏi của bạn có lẽ ... nhưng tùy thuộc vào những gì bạn đang cố gắng đạt được, có lẽ Exuberant Ctags đáng xem.

+0

đề xuất tốt, nó sẽ hữu ích hơn nếu có một thư viện có thể phân tích đầu ra ctags – Mike

1

Đã không thử, nhưng việc sử dụng các ràng buộc Python từ trình phân tích cú pháp Clang của LLVM có thể hoạt động; xem here.

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