2011-10-18 32 views
9

Tôi muốn đọc và học từ mã nguồn của trình thông dịch/biên dịch của ngôn ngữ kịch bản. Trình biên dịch/biên dịch ngôn ngữ kịch bản nào có mã nguồn đọc đơn giản nhất, rõ ràng nhất và dễ nhất? Tôi muốn nó được viết bằng C/C++ (những gì khác được trình biên dịch bằng văn bản trong anyway?) Bởi vì tôi đang lập kế hoạch viết một trình biên dịch trong C.Mã thông dịch ngôn ngữ kịch bản lệnh để tìm hiểu từ

+0

Hãy thử cái bạn thích nhất. – hari

+0

Có vẻ như một số ít người đã hiểu sai câu hỏi. Vui lòng đọc lại: p – slartibartfast

Trả lời

11

Hãy xem lua, bạn có thể xem qua các phiên bản đầu tiên của ngôn ngữ lập trình và xem nó đã phát triển như thế nào. Nó được viết bằng C và có một mã sạch và đẹp. Bạn có thể viết một trình biên dịch trong hầu hết các ngôn ngữ lập trình, nhưng C là một trình biên dịch mà hầu hết các lập trình viên đã chọn.

+1

Bạn có thể lấy mã nguồn cho tất cả các phiên bản trong một gói tại http://www.lua.org/ftp/lua-all.tar.gz. Tất cả đều biên soạn tốt. – lhf

+0

Mã nguồn cho một số phiên bản Lua gần đây có thể được duyệt bằng các liên kết tại http://www.lua.org/source/. Xem thêm http://lua-users.org/wiki/LuaSource. – lhf

6

Các ngắt CPython đã được khoảng một thời gian khá và tôi sẽ hãy tưởng tượng rằng nó sẽ rất hữu ích cho bạn.

+0

Người hỏi câu hỏi không rõ về những gì anh/cô ấy muốn. Bây giờ anh/cô ấy đã làm rõ, tôi đã chỉnh sửa câu trả lời của tôi. –

0

một ngôn ngữ nổi tiếng, nhưng không đơn giản (Mã nguồn PHP). Bạn có thể tận dụng mã nguồn.

PHP Source Code

+1

Cho rằng 'đơn giản' là tiêu chí _primary_ của OP, nếu nguồn PHP không đơn giản thì đây là câu trả lời như thế nào? – ildjarn

+0

@ildjarn: Mã nguồn PHP không đơn giản, nhưng bạn có thể hưởng lợi từ Mã nguồn ngay cả một vài –

2

Hãy xem V8 cho JavaScript. Mỗi interpeter có một thành phần gọi là tokenizer. GNU có tên là bò rừng. Hãy nhìn vào nó quá. Nó có thể hữu ích. Chromium cũng sử dụng một số mã thông báo để giải thích html trên Webkit, nhưng V8 là trình thông dịch javascript.

Claudio M. Souza Junior

4

AngelScript là một lựa chọn rất tốt cho việc học về trình biên dịch. Đây là một ngôn ngữ với cú pháp quen thuộc C/C++, bộ sưu tập rác, nó hướng đối tượng với tính kế thừa và đa hình, đa nền tảng và biên dịch thành mã byte.

Lựa chọn thứ hai của tôi sẽ là Lua.

4

Tôi muốn giới thiệu, như một lời giới thiệu nhẹ nhàng, có một cái nhìn tại LLVM Tutorial.

Chris Lattner tạo ra một ngôn ngữ đồ chơi đơn giản Kaleidoscope để hiển thị các giai đoạn khác nhau của biên soạn:

Ông sau đó chứng minh làm thế nào để add JIT capabilities (cần thiết cho một thông dịch viên).

Ngôn ngữ đồ chơi cực kỳ đơn giản, và do đó mã kết quả cũng đơn giản, và thể hiện độc đáo kiến ​​trúc mà không làm chết bạn trong chi tiết triển khai.

Tôi không chắc chắn rằng hướng dẫn được cập nhật đầy đủ và có thể được sử dụng như là chống lại một phiên bản LLVM gần đây, nhưng tôi khuyên ít nhất là đọc nó.

(Và tất nhiên, hãy đọc Dragon Book).

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