Thiết kế trình biên dịch - Tổng quan
Máy tính là sự kết hợp cân bằng giữa phần mềm và phần cứng. Phần cứng chỉ là một phần của thiết bị cơ khí và các chức năng của nó đang được điều khiển bởi một phần mềm tương thích. Phần cứng hiểu các hướng dẫn dưới dạng điện tử, là bản sao của ngôn ngữ nhị phân trong lập trình phần mềm. Ngôn ngữ nhị phân chỉ có hai bảng chữ cái, 0 và 1. Để hướng dẫn, các mã phần cứng phải được viết ở định dạng nhị phân, đơn giản là một dãy số 1 và 0. Sẽ là một nhiệm vụ khó khăn và cồng kềnh đối với các lập trình viên máy tính khi viết những đoạn mã như vậy, đó là lý do tại sao chúng ta có những trình biên dịch để viết những đoạn mã như vậy.
Hệ thống xử lý ngôn ngữ
Chúng tôi đã biết rằng bất kỳ hệ thống máy tính nào cũng được cấu tạo từ phần cứng và phần mềm. Phần cứng hiểu một ngôn ngữ mà con người không thể hiểu được. Vì vậy, chúng tôi viết chương trình bằng ngôn ngữ bậc cao, dễ hiểu và dễ nhớ hơn. Các chương trình này sau đó được đưa vào một loạt công cụ và thành phần hệ điều hành để có được mã mong muốn mà máy có thể sử dụng. Đây được gọi là Hệ thống xử lý ngôn ngữ.
Ngôn ngữ cấp cao được chuyển đổi thành ngôn ngữ nhị phân trong nhiều giai đoạn khác nhau. Acompilerlà chương trình chuyển đổi ngôn ngữ cấp cao sang hợp ngữ. Tương tự, mộtassembler là một chương trình chuyển đổi ngôn ngữ hợp ngữ sang ngôn ngữ cấp máy.
Đầu tiên chúng ta hãy hiểu cách một chương trình, sử dụng trình biên dịch C, được thực thi trên máy chủ.
Người dùng viết chương trình bằng ngôn ngữ C (ngôn ngữ bậc cao).
Trình biên dịch C, biên dịch chương trình và chuyển nó sang chương trình hợp ngữ (ngôn ngữ cấp thấp).
Sau đó một trình hợp dịch sẽ dịch chương trình hợp ngữ thành mã máy (đối tượng).
Một công cụ trình liên kết được sử dụng để liên kết tất cả các phần của chương trình với nhau để thực thi (mã máy thực thi).
Bộ tải nạp tất cả chúng vào bộ nhớ và sau đó chương trình được thực thi.
Trước khi đi sâu vào các khái niệm về trình biên dịch, chúng ta nên hiểu một vài công cụ khác hoạt động chặt chẽ với trình biên dịch.
Bộ tiền xử lý
Bộ tiền xử lý, thường được coi là một phần của trình biên dịch, là một công cụ tạo ra đầu vào cho trình biên dịch. Nó xử lý macro, tăng cường, bao gồm tệp, mở rộng ngôn ngữ, v.v.
Thông dịch viên
Một trình thông dịch, giống như một trình biên dịch, dịch ngôn ngữ cấp cao sang ngôn ngữ máy cấp thấp. Sự khác biệt nằm ở cách họ đọc mã nguồn hoặc đầu vào. Một trình biên dịch đọc toàn bộ mã nguồn cùng một lúc, tạo mã thông báo, kiểm tra ngữ nghĩa, tạo mã trung gian, thực thi toàn bộ chương trình và có thể liên quan đến nhiều lần chuyển. Ngược lại, một trình thông dịch đọc một câu lệnh từ đầu vào, chuyển nó thành một mã trung gian, thực thi nó, sau đó lấy câu lệnh tiếp theo theo trình tự. Nếu lỗi xảy ra, trình thông dịch sẽ dừng thực thi và báo cáo lỗi đó. trong khi một trình biên dịch đọc toàn bộ chương trình ngay cả khi nó gặp một số lỗi.
Người lắp ráp
Trình hợp dịch dịch các chương trình hợp ngữ thành mã máy. Đầu ra của trình hợp dịch được gọi là tệp đối tượng, tệp này chứa sự kết hợp của các lệnh máy cũng như dữ liệu cần thiết để đặt các lệnh này trong bộ nhớ.
Người liên kết
Linker là một chương trình máy tính liên kết và kết hợp các tệp đối tượng khác nhau với nhau để tạo thành một tệp thực thi. Tất cả các tệp này có thể đã được biên dịch bởi các trình lắp ráp riêng biệt. Nhiệm vụ chính của trình liên kết là tìm kiếm và định vị mô-đun / quy trình được tham chiếu trong một chương trình và xác định vị trí bộ nhớ nơi các mã này sẽ được tải, làm cho lệnh chương trình có tham chiếu tuyệt đối.
Bộ tải
Loader là một phần của hệ điều hành và chịu trách nhiệm tải các tệp thực thi vào bộ nhớ và thực thi chúng. Nó tính toán kích thước của một chương trình (hướng dẫn và dữ liệu) và tạo không gian bộ nhớ cho nó. Nó khởi tạo các thanh ghi khác nhau để bắt đầu thực thi.
Trình biên dịch chéo
Một trình biên dịch chạy trên nền tảng (A) và có khả năng tạo mã thực thi cho nền tảng (B) được gọi là trình biên dịch chéo.
Trình biên dịch từ nguồn sang nguồn
Một trình biên dịch lấy mã nguồn của một ngôn ngữ lập trình và dịch nó sang mã nguồn của ngôn ngữ lập trình khác được gọi là trình biên dịch mã nguồn.