2010-11-03 40 views
6

Bản sao có thể xảy ra:
Methodologies for designing a simple programming language
Learning to write a compilerBạn sẽ viết về một ngôn ngữ lập trình đơn giản như thế nào?

Tôi muốn viết một ngôn ngữ lập trình với cú pháp tương tự như QBasic nhưng thậm chí đơn giản hơn. Tôi muốn nó được cho các lập trình viên bắt đầu. Sự đơn giản của nó sẽ khuyến khích các lập trình viên tham vọng không từ bỏ và khiến họ quan tâm đến lập trình. Ví dụ: Thay vì số của QBasic IN "Hello World!"

Tôi sẽ sử dụng

Viết "Hello World!"

hoặc nhiều hơn một chút như VB

Write ("Hello World")

Làm thế nào tôi sẽ đi về thích ứng với cú pháp cơ bản để làm cho ngôn ngữ của tôi?

+0

Bản sao có thể có của http://stackoverflow.com/q/1208338/246069 – YWE

+0

"Tính đơn giản của nó sẽ khuyến khích những người lập trình tham vọng không từ bỏ và khiến họ quan tâm đến lập trình." - Không khuyến khích bạn, nhưng ngôn ngữ đơn giản có xu hướng đi vào con đường của mình sau một thời gian ngắn. Tôi thích các ngôn ngữ * đơn giản hơn *, nhưng đừng thiếu các tác vụ lớn hơn/phức tạp hơn (đặc biệt là Python). Ngoài ra, bạn có yêu cầu đầu vào như thế nào cú pháp nên được như thế, hoặc bạn có muốn gợi ý về cách thực sự phân tích nó? – delnan

+0

Bạn nói đúng. Tôi bắt đầu học BASIC năm ngoái và tôi thực sự rất thích nó vì vậy bây giờ tôi đang cố gắng để tìm hiểu C vì vậy tôi có thể làm một số chương trình sâu hơn. Tôi cũng học được những điều cơ bản về thị giác. Tuy nhiên, tôi nghĩ rằng nếu tôi bằng cách nào đó có thể sửa đổi cú pháp cơ bản, tôi có thể thêm các lệnh riêng của mình cũng như làm cho nó trở thành một phiên bản BASIC mạnh mẽ hơn nhưng với một cú pháp đơn giản hơn. – RCProgramming

Trả lời

14

Đây không phải là một nhiệm vụ đơn giản. Phân tích ngôn ngữ và lý thuyết trình biên dịch là những đối tượng khá nặng. Rất nhiều o 'toán học. Bạn cũng phải quyết định nền tảng nào bạn muốn nhắm mục tiêu, cũng sẽ xác định xem ngôn ngữ của bạn có được biên dịch đầy đủ hay không (ví dụ: C/C++, Pascal), được biên dịch sang bytecode (ví dụ: Python, Java) hoặc được giải thích tại thời gian chạy (ví dụ: VBScript) , JavaScript). Để chỉ định chính ngôn ngữ, hãy chải lên trên Backus-Naur format.

Để giúp bạn cùng, có một số máy phát điện phân tích cú pháp mạnh mẽ trên mạng, bao gồm:

  • Lex/Yacc (Flex/Bison là phiên bản GNU) - Tiêu chuẩn ngành học cũ. Đối với việc phát triển một trình biên dịch C/C++
  • ANTLR - Nếu bạn quan tâm trong việc tạo ra một trình biên dịch sử dụng Java
  • Boost.Spirit - Một cách tiếp cận khác nhau, cho phép đặc tả của ngôn ngữ sử dụng C++ riêng của mình.

Và nhiều hơn thế nữa. Bạn có thể tìm thấy so sánh here, trong khi một danh sách khác có thể được tìm thấy here

Nếu bạn thực sự quan tâm đến lý thuyết đầy đủ, bạn muốn xem The Dragon Book.

Nhưng tôi phải nhắc lại: Đây là chủ đề lớn. Có rất nhiều, nhiều công cụ để giúp bạn trên đường đi, nhưng lỗ thỏ đi khá sâu.

+3

Đây là một chủ đề lớn, nhưng * không * liên quan đến nhiều (ít nhất là điều mà hầu hết mọi người sẽ nghĩ đến như) toán học. –

+0

Cảm ơn bạn rất nhiều vì câu trả lời kỹ lưỡng này. Tôi có một vài câu hỏi về câu trả lời của bạn. Phân tích cú pháp có nghĩa là gì? Ngôn ngữ như BASIC sẽ thuộc loại nào? – RCProgramming

+0

Một vài nhận xét: (1) Không, nó không phải là toán - nhưng dù sao thì rất trừu tượng. (2) JavaScript không được hiểu vì mãi mãi (hầu hết các triển khai thậm chí là biên dịch JIT bây giờ). Những ngày này, không có ngôn ngữ nghiêm trọng nào chỉ giải thích mã nguồn hoặc thậm chí là AST trực tiếp (các triển khai Ruby cũ hơn đã làm, các ngôn ngữ với lập trình meta compiletime có thể làm được). (3) (E) BNF rất hữu ích để biết, nhưng các trình tạo phân tích cú pháp DSL sử dụng hoặc khác nhau hoặc hoàn toàn không liên quan, vì vậy nó không phải là những thứ quan trọng nhất. Chưa kể rằng đó chỉ là ngữ pháp, bạn vẫn phải xây dựng một AST và làm cho nó chạy. – delnan

2

Tôi nghĩ rằng bắn lên của việc này là:

  1. đơn giản để sử dụng.
  2. Đơn giản để thiết kế/triển khai.
  3. Khả năng biểu cảm mạnh mẽ.

Chọn 1,9 trong số đó.

Rất có thể để có được mức độ hợp lý của bất kỳ hai trong số đó. Làm bất kỳ hai cái nào hoàn toàn là rất khó và cố gắng để có được cả ba lá bạn ở một nơi không có đất, nơi bạn không làm tốt.

p.s. Tôi speek từ experiance cho # 1 + # 3

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