2013-01-07 38 views
7

Tôi đã có thể sử dụng API ASTT của CDT để phân tích mã nguồn thành công. Câu hỏi của tôi liên quan đến việc đảo ngược: Làm thế nào tôi có thể xây dựng một C AST lập trình, và sau đó nói với nó để viết chính nó vào một tập tin? Tôi đã thấy ASTWriter lớp (nhưng đó là nội bộ) và không thể tìm thấy bất kỳ hướng dẫn hoặc tài liệu về xây dựng AST thực tế.Sử dụng API cú pháp trừu tượng của CDT để tạo/viết mã C?

Tôi đã tìm thấy bài viết mà tôi muốn làm: Generating Rewritable Abstract Syntax Trees làm cho nó có vẻ như tạo mã sẽ dễ dàng nếu tôi có thể xây dựng cây và nói 'tự viết'. Điều này có thể xảy ra trong CDT và làm thế nào tôi có thể bắt đầu (tốt nhất là không sử dụng/phương pháp nội bộ?)

+0

Bạn có quan tâm nhiều hơn đến giải pháp dựa trên CDT hay giải pháp nào cho phép bạn tạo/chuyển đổi AST tùy ý cho C và sau đó đánh dấu kết quả? –

+0

Do thay đổi tập trung vào dự án tạo ra câu hỏi này, điều này không còn là nhu cầu lớn. Nếu chúng ta xem xét lại nó, tôi sẽ thích một giải pháp dựa trên CDT (như giải pháp tái cấu trúc được Eugene đề cập) vì dự án là một trình cắm thêm dựa trên Eclipse. –

Trả lời

1

Tôi khuyên bạn nên bắt đầu khám phá CRefactoring và các lớp con của nó (ví dụ: ExtractFunctionRefactoring).

Có rất nhiều vấn đề mà khuôn khổ CDT refactoring cố gắng để giải quyết:

  1. Hãy xem trước sử dụng những thay đổi trước khi thực sự cam kết chúng vào mã nguồn.
  2. Hoạt động trên lỗi tệp chưa lưu (ví dụ: cấu trúc lại mã trong trình chỉnh sửa nguồn chưa được lưu)
  3. Tôn trọng cài đặt định dạng mã người dùng trong mã mới được tạo.
  4. Giao dịch có thể hoàn tác bao trùm một số tệp nguồn.

Tôi khá chắc chắn rằng ngay cả khi bạn không cần tất cả các tính năng đó, hai lớp này sẽ là điểm khởi đầu tốt.

+0

Cảm ơn bạn. Vấn đề của tôi là một thế hệ một lần của một tệp nguồn vì vậy tôi thậm chí không nghĩ đến việc tái cấu trúc, nhưng trong các lớp bạn đã đăng, tôi đã tìm thấy một lớp đầy hứa hẹn được gọi là INodeFactory. Kết hợp với http://wiki.eclipse.org/images/b/be/PTPUserDev2012_Ruegg_Refactoring.pdf Tôi (hy vọng!) Tôi có thể tìm ra từ đây. –

2

Những gì bạn cần là sử dụng một ASTWriter:

ASTWriter writer = new ASTWriter() 
String code = writer.write(myAST); 

Sau đó, bạn có thể đổ chuỗi vào một tập tin đó là trong bối cảnh của plugin nguồn nhật thực.

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