2010-07-15 38 views
6

Câu hỏi này chỉ là một cái gì đó mà tôi đã suy nghĩ về thời gian gần đây. Ngôn ngữ lập trình có thể được viết bằng ngôn ngữ đó như là một triển khai thứ hai không? ví dụ. Java. Có thể viết lại ngôn ngữ lập trình java bằng ngôn ngữ lập trình java không?Có thể thực hiện một ngôn ngữ lập trình thứ hai bằng ngôn ngữ đó không?

Xin lỗi nếu đây là câu hỏi ngớ ngẩn nhưng tôi cần biết!

GF

Trả lời

9

Có, điều đó là có thể. Hãy xem BootStrapping.

+0

+1 Tôi đã làm hỏng bộ não của mình (và tiếp tục sử dụng Google) để tìm kiếm cụm từ đó. Tôi mơ hồ nhớ một cái gì đó về C trình biên dịch được liên tục thực hiện trong chính nó. –

12

Luôn. Bất kỳ ngôn ngữ Turing-Complete là - cũng - một ngôn ngữ Turing-Complete. Nếu bạn có thể viết trình biên dịch bằng một ngôn ngữ hoàn chỉnh, bạn có thể viết nó bằng bất kỳ ngôn ngữ nào tương đương.

+0

Ngay cả một số ngôn ngữ Turing-Complete có thể có giới hạn, tùy thuộc vào ý nghĩa của chúng tôi bằng cách 'triển khai'. Hãy tưởng tượng một ngôn ngữ hoàn chỉnh Turing chỉ có thể nhập và xuất văn bản ASCII thuần túy. Một ngôn ngữ như vậy sẽ không thể xuất ra một nhị phân thực thi và do đó sẽ không thể xây dựng trình thông dịch "tự do" của riêng nó. –

+0

[Tệp văn bản ASCII có thể thực thi] (https://astr0baby.wordpress.com/2012/08/31/executable-ascii-files-pt-2/) – barbecue

3

Có. Miễn là ngôn ngữ là Turing Complete, bạn có thể tự thực hiện ngôn ngữ đó.

+1

Tính hoàn chỉnh của Turing không hoàn toàn là yêu cầu IIRC. Nhưng các ngôn ngữ Turing-incomplete hiện tại (Regex, SQL và như vậy) vẫn chưa đủ. –

+0

Bạn có thể đọc regex bằng regex, nhưng tôi nghĩ rằng không thể tạo một triển khai regex bằng cách sử dụng nó. Sự hoàn thiện turing là lý thuyết, để viết một trình biên dịch java bạn cần phải thao tác bit và ghi vào đĩa (Java có thể làm điều này). – tovare

+2

@tovare: Thực ra bạn thậm chí không thể [xác minh regex bằng regex] (http://stackoverflow.com/questions/172303/is-there-a-regular-expression-to-detect-a-valid-regular-expression/172363 # 172363) (ví dụ: ngôn ngữ chúng tôi sử dụng để chỉ định ngôn ngữ thông thường là không thường xuyên)! –

1

Nó không chỉ có thể, nó được. ecj (trình biên dịch của Eclipse) là một ví dụ, và tôi nghĩ bản thân SDK đi kèm với một trình biên dịch Java thuần túy, mặc dù tôi có thể sai về điều đó.

7

Có cho bất kỳ ngôn ngữ Turing hoàn chỉnh nào. Lisp đến với tâm trí là một trong những ngôn ngữ dễ nhất để viết một trình thông dịch/biên dịch cho chính nó.

6

Có thể. Một ví dụ gần đây là trăn có pypy. Một ít thông tin hơn là trên trang Wikipedia và một số liên kết tốt.

+0

AFAIK Pypy không diễn giải, nó biên dịch VM. – mathk

+1

Pypy là trình thông dịch Python được viết bằng một tập hợp con giảm của Python (RPython). Tuy nhiên dự án có thể xây dựng một phiên bản C và thậm chí truy tìm JITC bằng cách thực hiện các phép biến đổi trên nguồn RPython. –

+0

Có nhưng pypy có thể giải thích VM đang được thiết kế không? – mathk

0

Chắc chắn. Tôi thậm chí đã nhìn thấy một người nào đó viết một trình biên dịch COBOL được viết bằng COBOL! (OK, không phải là trình biên dịch đầy đủ ... nhưng ít nhất là một trình phân tích cú pháp.)

4

Chắc chắn.

Nhiều năm trước, một trong những máy tính gia đình đầu tiên của tôi, một chiếc Vic 20, đi kèm với bộ thông dịch BASIC tích hợp nhưng đó chính là nó. Vì vậy, tôi đã viết phiên bản đầu tiên của một assembler cho nó trong BASIC. Sau đó, tôi sử dụng bộ lắp ráp nguyên thủy đầu tiên của tôi để viết một bộ lắp ráp tốt hơn.

+0

+1 để đề cập đến một cổ điển cũ 8 đắng! :-) – monojohnny

+0

@monojohnny Thẻ Punch đang quay lại. Ổ đĩa USB này chỉ là một mốt nhất thời. :-) – Jay

2

Trình biên dịch GCC được viết bằng C.

Đã lâu rồi ai cũng xây dựng bất kỳ trình biên dịch C nào từ assembly.

1

viết trình biên dịch java bằng java - không sao cả. thực ra tôi nghĩ javac của Sun được viết bằng java. Tuy nhiên,

tuy nhiên, 'java' thường có nghĩa là nhiều thứ hơn chỉ là javac, vì vậy câu hỏi của bạn không rõ ràng lắm.

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