2009-08-05 29 views
5

Ngôn ngữ lập trình thực sự nào dễ viết các thông dịch viên?Ngôn ngữ lập trình thực sự nào dễ viết các thông dịch viên?

Ngôn ngữ "thực" đối với tôi, là những ngôn ngữ bạn thực sự có thể viết một dự án nhỏ với, không phải là một trong số dễ dàng Esoteric programming languages.

(Tôi hỏi vì tôi muốn làm một số dự án sở thích.)

+2

Esperanto nên dễ dàng. :) –

Trả lời

10

Bộ đánh giá Metacircular trong SICP là bài tập viết một trình thông dịch Đề án trong Đề án. Đó là một dự án CS năm đầu tiên phổ biến.

+2

Đối với những người không biết, SICP là một cuốn sách (trực tuyến miễn phí) được gọi là Cấu trúc và Giải thích các Chương trình Máy tính. –

5

Pascal Bản gốc Wirth là một ứng cử viên tốt, và thường được sử dụng như một bản demo trong máy phát điện phân tích cú pháp. Ngữ pháp của nó là LL (1), và nếu không khá nghiêm ngặt, vì vậy thật dễ dàng để phân tích cú pháp. Tính năng-khôn ngoan nó khá hạn chế là tốt.

Tuy nhiên, bạn có thể muốn thử nghiệm một chút - ví dụ: bạn có thể muốn bỏ qua các con trỏ, nhưng hỗ trợ các chuỗi hạng nhất.

3

Đề án hoặc bất kỳ biến thể lisp nào.

+4

Đây là một chút lừa đảo; trong khi cú pháp chắc chắn không khó để phân tích cú pháp, chức năng của Đề án và các biến thể LISP khác có thể khá khó thực hiện trong một thông dịch viên. Lambdas và đệ quy đuôi đặc biệt có rất nhiều cạm bẫy. – Imagist

0

Tôi nghĩ ngôn ngữ cú pháp đánh dấu là Liran. Cấu trúc cú pháp giúp phân tích dễ dàng vì các khối mã được phân định rõ ràng giữa các thẻ bắt đầu và kết thúc. Về mặt lý thuyết, bạn có thể dễ dàng xây dựng trình thông dịch cấp 1 để phân tích cú pháp và chạy mã trực tiếp.

Điều đó nói rằng không có bất kỳ ngôn ngữ đánh dấu nào ở đó làm những điều có ý nghĩa trong ngữ cảnh tôi dường như bạn đang hướng đến (bạn có thể muốn viết của riêng bạn). Lựa chọn tốt nhất tiếp theo có thể là ngôn ngữ với chức năng tối thiểu và tốt nhất là không hỗ trợ lập trình thủ tục. Một ngôn ngữ như BASIC nên dễ dàng xây dựng trình thông dịch cấp 1.

Điều tốt nhất tiếp theo có lẽ là các ngôn ngữ kịch bản ban đầu không cung cấp nhiều yếu tố cú pháp và khá phức tạp. Tôi không nghĩ ra bất cứ điều gì.

Nhưng có lẽ tùy chọn tốt nhất cho tất cả là để bạn thiết kế ngôn ngữ của riêng bạn. Trình thông dịch trở nên dễ dàng hơn để xây dựng vì bạn có kiến ​​thức sâu về cú pháp ngôn ngữ và có thể quy định cấu trúc ngôn ngữ và ngữ nghĩa của riêng bạn trong trình thông dịch.

...

Sự nhấn mạnh vào trình thông dịch cấp 1 là vì bạn đã đề cập đến bạn muốn dễ dàng.

+0

mức 1 có nghĩa là gì? –

1

Trong lớp hệ điều hành đại học của mình, chúng tôi đã viết một thông dịch viên cho Db (D-flat). Nó rất đơn giản và được xác định rõ.

+0

Bạn có thể vui lòng cung cấp liên kết đến nội dung nào đó liên quan đến ngôn ngữ này hay không, dường như tôi không thể tìm thấy nó ... –

+0

Bạn nói đúng. Tôi không thể tìm thấy nó ở bất cứ nơi nào trực tuyến, ngoại trừ trang web cho lớp học. Có lẽ đó là một ngôn ngữ được tạo sẵn cho lớp chúng tôi. Dù bằng cách nào, đây là liên kết đến định nghĩa ngôn ngữ chính thức: http://users.csc.calpoly.edu/~akeen/courses/csc430/handouts/assignments/hw3.pdf – bkritzer

+0

Có thể dựa trên hệ thống được mô tả trong Dr. Dobbs Journal (bất cứ ai xung quanh biết về DDJ?). Trong bài viết này (http://www.drdobbs.com/184410754) Al Stevens đã công bố ý tưởng cho D-Flat và trong các bài viết tiếp theo mô tả sự phát triển của nó. – Kwebble

4

Forth. Được rồi, bây giờ tôi chỉ gõ này bởi vì tôi cần ít nhất 15 ký tự trong câu trả lời, nhưng việc triển khai Forth nhỏ nhất là một vài KB. Thật khó để nghĩ về bất kỳ ngôn ngữ nào khác có thể có một lõi nhỏ như vậy. Có lẽ bản gốc của McCarthy 1958 Lisp, nơi các chức năng được biên soạn tay.

5

Rất dễ dàng để viết một thông dịch viên cho ngôn ngữ lập trình Forth (một khi bạn biết cách thực hiện - nhưng nó cũng được tài liệu). Forth đã được sử dụng cho các vấn đề trong thế giới thực trong hơn 40 năm.

Có lẽ quá dễ dàng, nhưng bạn sẽ học được rất nhiều trong quá trình này.

Giới thiệu nhẹ nhàng (trực tuyến) là chapter 9 trong "FORTH FORTH" của Leo Brodie.

+1

Cảm ơn bạn đã liên kết. –

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