sinh mã tự động thường được thực hiện trong các cách sau:
- báo cáo In chứa đoạn mã
- mẫu văn bản với placeholders (macro nghĩ)
IMHO, thực hành tốt hơn là:
- xây dựng một AST cho đoạn mục tiêu, và sau đó prettyprint
Hầu như không ai thực hiện sau này, bởi vì các công cụ chủ yếu là không có.
Công cụ 2to3 của Python cung cấp (tôi nghĩ) AST mục tiêu và vẽ đẹp.
Nhưng câu hỏi bạn không hỏi, là "tạo ra từ cái gì?" Bằng cách nào đó bạn phải chỉ định một cách trừu tượng những gì bạn muốn được tạo (hoặc nó không phải là một chiến thắng). Và công cụ của bạn phải có khả năng đọc được đặc tả đó bằng cách nào đó.
Nhiều chương trình tạo mã bao gồm viết mã thủ tục gọi các cơ chế thế hệ trên; mã thủ tục đóng vai trò như một đặc tả ngầm. Nó là "dễ dàng" để đọc các đặc điểm kỹ thuật; nó chỉ là mã trong ngôn ngữ được trình tạo mã sử dụng.
Một số sơ đồ tạo mã sử dụng một số loại cấu trúc biểu đồ để cung cấp một khung mà trên đó các phân đoạn đặc tả được treo, điều đó thúc đẩy quá trình tạo mã. Sơ đồ lớp UML là một ví dụ cổ điển. Những đề án này không dễ dàng như vậy; bạn cần một "trình đọc thông số kỹ thuật" (ví dụ:, Trình đọc sơ đồ UML hay còn gọi là XMI hoặc một số thứ như vậy, hoặc nếu bạn không sử dụng UML, một số loại trình phân tích cú pháp đặc tả).
Công cụ Python 2to3 sử dụng trình phân tích cú pháp Python2 để đọc "spec". Nếu bạn muốn tạo mã từ Python2, điều đó sẽ ổn. Tôi nghi ngờ bạn không muốn làm điều đó.
Cách tiếp cận thực hành tốt nhất là phương pháp thống nhất khả năng đọc/phân tích/thông số kỹ thuật đi qua, với khả năng tạo AST cho ngôn ngữ đích.
DMS Software Reengineering Toolkit là hệ thống phân tích và chuyển đổi chương trình mục đích chung. Nó phân tích "các đặc tả" (các thể hiện của các ngữ pháp để bạn có thể định nghĩa nó) thành các AST; nó cũng sẽ cho phép bạn xây dựng các AST tùy ý cho bất kỳ ngữ pháp nào, bằng cách sử dụng cả hai mã thủ tục [như đã phác thảo ở trên] hoặc sử dụng mẫu khớp/thay thế (khá độc đáo đối với DMS). Một phần của giao diện người dùng DMS langauge là một trình duyệt đẹp, có thể tái tạo văn bản từ AST (chúng được kiểm tra bằng mã roundtripping: phân tích thành AST, AST khá, tốt hơn là cùng một văn bản).
Trong trường hợp ngữ pháp của bạn không được biết đến với DMS, nó có trình phân tích cú pháp cực kỳ tốt và trình tạo khá đẹp, cũng như các cơ chế hỗ trợ khác để phân tích chương trình. Tất cả các máy móc bổ sung đó thường không có sẵn với các trình tạo phân tích cú pháp cổ điển, hoặc chỉ với một gói "AST" đơn giản. (Tôi không biết 2to3 là gì).
Mức độ liên quan của điều này với Python là DMS có Python front end cũng như grammars for many other languages.
Vì vậy, bạn có thể phân tích cú pháp đặc điểm kỹ thuật của mình và tạo mã Python bằng ASTs, tiếp theo là in đẹp.
Bạn đang sử dụng AST tùy chỉnh hay bạn đang tạo AST AST (sử dụng ví dụ: mô-đun 'ast')? –
Rất có thể là một AST Python, sử dụng mô đun 'ast'. Tôi nhận thấy ANTLR đã phục vụ để python một chút, và điều đó có vẻ như một cách có thể để đi, nhưng nó có vẻ hợp lý hơn để gắn bó với nội bộ Python. – mvanveen