Nếu đó là đồng bằng C, lex
và yacc
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.
Xem thêm: http://code.google.com/p/pycparser/ –
Cảm ơn, tôi sẽ thêm điều đó vào danh sách. – luke