Chương trình dịch
Chương trình dịch chính là một phần mềm
chuyển dạng từ mã nguồn sang thành chuỗi các chỉ thị máy tính gọi là biên dịch
(hay ngắn gọn hơn là dịch)
Thông
dịch (interpeter) là một phần mềm có khả năng đọc, chuyển dịch mã nguồn của một ngôn
ngữ lập trình ra ngôn ngữ máy
(Ví
dụ: trình thông dịch của Java)
Biên
dịch (compiler) là phần mềm có khả năng chuyển
dịch mã nguồn của một ngôn ngữ ban đầu sang dạng mã mới thuộc về ngôn ngữ cấp
thấp hơn.
Ghi chú : Trình thông dịch sẽ dịch từng câu lệnh một và chương trình đích sẽ
không được lưu lại (java). Còn trình biên dịch sẽ dịch toàn bộ chương trình,
cho ra chương trình đích (.exe) lưu lại trong máy tính rồi mới thực hiện chương
trình.
Quá trình thực hiện của Chương trình
dịch
Giai đoạn tiền xử lý:
- Phân tích từ vựng (Lexical Analysis),
phân tích cú pháp (Syntax Analysis), phân tích ngữ nghĩa
- Tiền xử lí ( preprocessing): nhận mã nguồn
và xoá bỏ các chú thích
Giai
đoạn dịch:
- Sinh mã: chuyển mã nguồn sang dạng mã
Assemly, sau đó dịch sang mã máy, tối ưu
mã máy
Giai
đoạn liên kết (link)
Mã
máy của một chương trình dịch từ nhiều nguồn khác nhau và các thư viện được
liên kết lại với nhau để tạo thành chương trình đích duy nhất. Kết thúc quá
trình tất cả các đối tượng được lên kết lại với nhau thành một chương trình có
thể thực thi được (executable).
Hình1-1. Sơ đồ quá trình biên dịch C
|
- Mỗi phần mềm lập trình (công cụ lập
trình) thường đã tích hợp sẵn chương trình dịch, Lệnh build chương trình
chính là chức năng chạy chương trình dịch file nguồn và các thư viện thành file
thực thi chương trình.
- Một trong những nhiệm vụ quan trọng của
chương trình dịch là phát hiện lỗi cú pháp của chương trình nguồn.
- Trình thông dịch giúp dịch trực tiếp lệnh
ngôn ngữ bậc cao ra chỉ thị ngôn ngữ máy để thực thi ngay do vậy chạy rất
nhanh. Tuy nhiên chính điều này lại là nhược điểm, đó là luôn cần tệp mã nguồn
khi chạy chương trình. Do đó khi chuyển phần mềm đến tay người sử dụng có thể bị
lộ mã nguồn chương trình. Vì vậy trình
thông dịch hay được sử dụng trong các hệ thống mã nguồn mở.