Thứ Bảy, 25 tháng 2, 2012

Vấn đề “Quả trứng và con gà” trong xây dựng compiler


Tháng 7032011



“Quả trứng và con gà” là một vấn đề tranh cãi chẳng bao giờ có đáp án. Người ta cũng thường mượn tên này để chỉ các vấn đề có dạng tương tự. Trong khoa học máy tính có một vấn đề dạng này rất nổi tiếng và nói chung nó không được nhiều bạn qu
an tâm, nhưng thực sự nó có ảnh hưởng tới bất kì người nào có sử dụng phần mềm: vấn đề xây dựng Trình biên dịch.

Vậy tại sao xây dựng Trình biên dịch là vấn đề Quả trứng và con gà? Vấn đề là thế này: bạn viết phần mềm bằng ngôn ngữ lập trình, sau đó dùng compiler để dịch thành mã máy. Vấn đề là compiler cũng là một phần mềm, vậy cái gì (phần mềm nào) được dùng để biên dịch ra compiler?
Câu trả lời liên quan tới một thuật ngữ : bootstrapping hoặc cũng thường được gọi là seft-hosting. Quá trình có thể được mô tả như sau :
- Viết một compiler A rất nhỏ để có thể biên dịch được các lệnh cơ bản của ngôn ngữ đích T (target language). Minimum compiler này được viết bằng mã máy nên không cần biên dịch
- Dùng tập lệnh cơ bản của T để viết một version lớn hơn của A, gọi là A1. Dùng A để biên dịch A1
- Quá trình này có thể được lặp lại vài lần: viết A2 và dùng A1 compile A2, viết A3 và dùng A2 compile A3… tới khi có được một compiler (tổng quát hơn là một software) theo mong muốn.
Một phương pháp khác là bắt đầu với một Interpreter.
Thông thường thì trình biên dịch của ngôn ngữ T sẽ được viết bởi T: compiler cho C được viết bằng C, compiler của Java được viết bằng Java, interpreter của Basic được viết bằng Basic… hoặc nếu không viết bằng T thì sẽ được viết bằng C (C là ngôn ngữ phổ biến nhất trong viết OS và compiler)
Nói chung, chỉ compiler đầu tiên mới cần phải trải qua quá trình khó khăn như trên, còn lại trình biên dịch N cho ngôn ngữ T bất kì có thể được viết như sau:
- Có một compiler N1 dùng để biên dịch code của ngôn ngữ T1
- Viết N bằng ngôn ngữ T1
- Dùng N1 để biên dịch ra N
Nguồn: bugcheck
Share this post
  • Share to Facebook
  • Share to Twitter
  • Share to Google+
  • Share to Stumble Upon
  • Share to Evernote
  • Share to Blogger
  • Share to Email
  • Share to Yahoo Messenger
  • More...

0 nhận xét

:) :-) :)) =)) :( :-( :(( :d :-d @-) :p :o :>) (o) [-( :-? (p) :-s (m) 8-) :-t :-b b-( :-# =p~ :-$ (b) (f) x-) (k) (h) (c) cheer

 
© Download do an khoa luan tai lieu
Designed by BlogThietKe Cooperated with Duy Pham
Released under Creative Commons 3.0 CC BY-NC 3.0
Posts RSSComments RSS
Back to top