2008-11-17 41 views
6

Tôi đang tìm thư viện dựa trên Windows có thể được sử dụng để phân tích cú pháp một loạt tệp C để liệt kê các biến toàn cầu và cục bộ. Các biến toàn cầu và cục bộ có thể được khai báo bằng typedef. Đầu ra (tức là danh sách biến toàn cầu và cục bộ) có thể được sử dụng để xử lý bài đăng (ví dụ: thay thế tên biến bằng tên mới).Phân tích các tệp C

Thư viện này có sẵn không?

Trả lời

11

Một số phương pháp có sẵn:

thay thế ly bạn có thể viết của riêng bạn bằng cách sử dụng lex and yacc (hoặc thân nhân của họ và bò rừng) bằng cách sử dụng công khai lex specificationyacc grammar.

+0

Xem thêm: http://code.google.com/p/pycparser/ –

+0

Cảm ơn, tôi sẽ thêm điều đó vào danh sách. – luke

1

Tôi không biết liệu thư viện có cung cấp thư viện hay không, nhưng hãy xem CTAGS.

0

Nếu đó là đồng bằng C, lexyacc là bạn bè, nhưng bạn cần phải thực hiện trên tài khoản C Preprocessor - file nguồn với các macro chưa giãn nở thường là không phù hợp với cú pháp C để phân tích cú pháp, được viết với K & R ngữ pháp trong tâm trí, rất có thể sẽ thất bại.

Nếu bạn quyết định phân tích đầu ra của bộ xử lý trước, hãy chuẩn bị rằng trình phân tích cú pháp của bạn sẽ thất bại do "phần mở rộng" của trình biên dịch cụ thể của bạn, vì tiêu đề thư viện tiêu chuẩn rất có thể sử dụng chúng. Ít nhất là trường hợp này với GCC.

Tôi đã làm điều này với GCC và cuối cùng đã quyết định đạt được mục tiêu của mình bằng cách sử dụng cách tiếp cận khác nhau. Nếu bạn chỉ cần thay đổi tên cho các biến, các biểu thức chính quy sẽ làm tốt, và không cần phải xây dựng một trình phân tích cú pháp đầy đủ, IMHO. Nếu mục tiêu của bạn chỉ là thu thập dữ liệu, thì nguồn dữ liệu cuối cùng là thông tin gỡ lỗi. Có nhiều cách để lấy thông tin gỡ lỗi ra khỏi nhị phân - cho các tệp thi hành ELF với DWARF có libdwarf, đối với Windows-land (COFF?) Cũng nên là một cái gì đó. Có lẽ bạn có thể sử dụng một số công cụ hiện có để có được thông tin gỡ lỗi về nhị phân - một lần nữa, tôi không biết gì về Windows, bạn cần phải điều tra.

3

Parsing C là khó khăn hơn rất nhiều so với kiểu dáng đẹp, khi bạn đưa vào tài khoản thổ ngữ khác nhau, chỉ thị tiền xử lý, cần thông tin loại trong khi phân tích cú pháp, v.v. Những người cho bạn biết "chỉ cần sử dụng lex và yacc" có rõ ràng là không được thực hiện phân tích cú pháp C sản xuất.

Một công cụ có thể làm điều này là chúng tôi C front end

Nó đề cập đến tất cả các vấn đề trên.

Khi hoàn thành, bảng có biểu tượng hoàn chỉnh, có thể điều hướng với tất cả số nhận dạng và thông tin loại tương ứng. Liệt kê các biến toàn cục và cục bộ sẽ không quan trọng với điều này.

Tôi là kiến ​​trúc sư đằng sau Thiết kế ngữ nghĩa.

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