2009-09-14 56 views
9

Tôi tự hỏi những gì đang biên dịch, điều gì sẽ xảy ra khi bạn biên dịch? Tôi có nghĩa là có bạn bấm biên dịch hoặc gõ vào trong giao diện điều khiển nhưng những gì nó thực sự làm trong "nền"?Điều gì sẽ xảy ra khi tôi biên dịch?

Trả lời

30
  1. Đầu tiên, trình biên dịch "lexes" nguồn. Điều này có nghĩa là nó biến đổi nguồn thành một chuỗi các "thẻ". Tokens là chuỗi các ký tự, số và ký hiệu có ý nghĩa đối với trình biên dịch.

  2. Tiếp theo, trình biên dịch "parses" trình tự mã thông báo từ bước một. Điều này có nghĩa là trình biên dịch kiểm tra để đảm bảo rằng nguồn tuân thủ các quy tắc (grammar) của ngôn ngữ lập trình.

  3. Tiếp theo, trình biên dịch thực hiện syntactic analysis để tạo đại diện cho nguồn để xác định ý nghĩa ngữ nghĩa của nguồn. Đây là bước mà trình biên dịch sẽ xây dựng một syntax tree.

  4. Cuối cùng, trình biên dịch sẽ thu được ý nghĩa ngữ nghĩa của nguồn trong biểu diễn đích (có thể là mã máy, ngôn ngữ trung gian như Microsoft's CIL hoặc ngôn ngữ lập trình khác).

Để biết chi tiết ngắn gọn, hãy xem Wikipedia. Để biết chi tiết gory, hãy xem the dragon book (mỗi sinh viên khoa học máy tính nên nghiên cứu cuốn sách này).

+1

cảm ơn bạn, "(mọi sinh viên khoa học máy tính nên nghiên cứu cuốn sách này)." Tôi là sinh viên khoa học máy tính .. Tôi chưa bao giờ thực sự biết về cuốn sách đó và tôi tập trung nhiều hơn vào lập trình .. cấu trúc dữ liệu, đối tượng bla bla .. không bao giờ thực sự băn khoăn "ngoài" – ant

+3

+1 cho cuốn Dragon Book – Pwninstein

+1

Lời giải thích rất hay. +1 – Alex

10

Xem this

Về cơ bản, yêu tinh ma thuật và nàng tiên lần lượt mã dễ đọc của con người vào mã máy.

3

Một tóm tắt rất ngắn gọn sẽ là một trình biên dịch phân tích mã của bạn kiểm tra lỗi và sau đó biến đổi nó thành byte hoặc mã máy.

Để có cái nhìn tốt hơn tôi sẽ đọc các bài viết trên wikipedia trình biên dịch:

http://en.wikipedia.org/wiki/Compiler

1

Biên dịch được dịch mã nguồn thành mã máy. Thông thường một trình biên dịch (hoặc thông dịch viên) sẽ tạo ra một mã trung gian đôi khi được gọi là mã byte chạy trên một máy ảo (đây là cách java được biên dịch). Mã byte được dịch bởi vm thành mã máy cụ thể chạy trên kiến ​​trúc cụ thể mà bạn đang nhắm mục tiêu. Toàn bộ quá trình này có thể được coi là "biên dịch"

+2

Mục tiêu thường là, nhưng không nhất thiết phải là mã máy. Các trình biên dịch tôi làm việc trên biên dịch mã C - sau đó chúng tôi sử dụng trình biên dịch C bản địa để hoàn thành công việc biên dịch thành mã máy. Một trong số họ tạo ra một mã p (mã máy giả - nơi dấu gạch nối đi đâu?); kết quả sau đó được thông dịch bởi một thông dịch viên sử dụng các hàm C (mã máy) thông thường để thực thi các lệnh p-code. Trình biên dịch Java tạo mã byte cho JVM - đó cũng không phải là mã máy. –

3

Hoặc this.

Sách Rồng, nguồn gốc để xây dựng trình biên dịch.

+0

'hoặc' hơi gây nhầm lẫn - so với cái gì? Bài đọc được đề xuất của bạn khá tốt, nhưng bạn nên làm cho câu trả lời của bạn nổi bật hơn. Sau đó, bạn sẽ nhận được các phiếu bầu ... –

+0

Đó là để đáp ứng với câu trả lời đầu tiên tôi tìm thấy cho câu hỏi này, mà chỉ đơn giản là "Điều này". như một liên kết đến bài viết của Wikipedia về trình biên dịch. –

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