2012-01-14 59 views
16

Tôi đã thấy rất nhiều hướng dẫn để tạo ngôn ngữ lập trình, nhưng rất ít để viết một ngôn ngữ bằng Python. Tôi muốn biết cách (tương đối dễ dàng) tạo ra một ngôn ngữ lập trình bằng Python.Cách tạo ngôn ngữ lập trình bằng Python

+3

Giống như bất kỳ ngôn ngữ nào khác. Nghiêm túc nếu bạn biết làm thế nào để thực hiện một trình biên dịch (hoặc thông dịch viên) trong bất kỳ ngôn ngữ nào và bạn biết cách lập trình python, bạn biết cách triển khai trình biên dịch trong python. – sepp2k

+2

Bắt đầu bằng cách viết một trình phân tích cú pháp. –

+0

Có các công cụ tốt cho C/C++ để phân tích ngôn ngữ của bạn: [bison] (http://www.gnu.org/software/bison/) và [flex] (http://flex.sourceforge.net/) có thể giúp đỡ rất nhiều. Tôi không có ý tưởng nếu các công cụ như vậy tồn tại cho python là tốt. – amit

Trả lời

8
  1. Hãy tưởng tượng ngôn ngữ của bạn. Bạn muốn nó trông như thế nào? Những tính năng nào cần có?
  2. Hãy suy nghĩ về một ngôn ngữ hiện có tương tự như ngôn ngữ mong muốn của bạn. Sẽ tốt nếu các từ khóa khác nhau, nhưng nếu bạn quyết định tạo Python, bạn sẽ không bắt đầu với Lisp bởi vì các cấu trúc về cơ bản rất khác nhau.
  3. Tìm ngữ pháp hiện có cho ngôn ngữ bạn đã chọn ở bước 2. Tôi xem tại đây: http://www.antlr3.org/grammar/list.html. Nếu bạn không thể tìm thấy, hãy thực hiện lại bước 2.
  4. Sử dụng ANTLR (hoặc bất kỳ trình tạo trình phân tích cú pháp nào hiểu ngữ pháp bạn tìm thấy ở bước 3), xây dựng mô-đun Python hiểu ngôn ngữ bạn đã chọn ở bước 2. ANTLR có một số mức hỗ trợ cho một "mục tiêu" của Python (nghĩa là mã trình phân tích cú pháp sẽ được viết bằng Python, trái với việc làm cho một trình phân tích cú pháp hiểu ngôn ngữ Python). Nếu bạn gặp khó khăn với mã phân tích cú pháp trong C (bạn có thể), hãy viết các ràng buộc Python cho nó (có lẽ là dễ sử dụng Boost Python, nhưng bạn có thể sử dụng Python C API trực tiếp nếu bạn khá quen thuộc với cả C và Python).
  5. Bắt đầu việc sửa đổi (theo từng bước nhỏ lúc đầu) để ngữ pháp từ bước 3 để làm cho nó giống như ngôn ngữ mà bạn thiết kế ở bước 1.

làm những điều này một cách cẩn thận và cố tình, và sau một vài ngày công việc bạn có thể có một trình phân tích cú pháp nửa chừng cho ngôn ngữ của bạn. Sau đó, bạn sẽ cần phải tiêu thụ đầu ra của trình phân tích cú pháp (nếu sử dụng ANTLR, hãy xem xét việc sử dụng các Cây Cú pháp Trừu tượng hoặc các AST, mà nó có thể tạo ra cho bạn). Sau đó, bạn sẽ cần phải chuyển đổi cú pháp được phân tích cú pháp thành một ngôn ngữ đích, chẳng hạn như x86 assembly hoặc một số bytecode trung gian chẳng hạn như được sử dụng bởi Java, Lua, Microsoft .NET hoặc bất kỳ thứ gì.

Chúc may mắn và được cảnh báo trước: quá trình này sẽ mất nhiều thời gian để làm đúng.

16

Không chắc chắn ý bạn là gì bằng cách "tạo ngôn ngữ lập trình". Nhưng tôi nghĩ bạn có thể thích đọc bài viết tuyệt vời của Peter Norvig (How to Write a (Lisp) Interpreter (in Python)). Điều này cho thấy làm thế nào bạn có thể xây dựng một thông dịch viên Lisp chỉ trong 90 lines of Python!

Khi bạn đã hiểu điều đó, hãy thử (An ((Even Better) Lisp) Interpreter (in Python)).

+1

Chương trình này gây ra lỗi. – elijaheac

+0

Hoạt động tốt trên PC của tôi. Bạn đang sử dụng phiên bản Python nào (nó giả sử Python 2.7, tôi nghĩ)? –

+0

AttributeError: đối tượng 'NoneType' không có thuộc tính 'find'. Tôi đang sử dụng Python 2.7 trên Windows. – elijaheac

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