Chương trình dịch là gì? Phân loại chương trình dịch?
1. Chương trình dịch là gì?
1.1. Khái niệm chương trình dịch
Chương tnh dch hay còn được gọi với tên tiếng Anh là compiler, là chương trình
chức năng chuyển đổi chương trình nguồn được viết bằng ngôn ngữ lập trình bậc cao sang
chương trình đích được thể hiện bằng ngôn ngữ máy chương trình đích này có thể chy
(thực thi) trên máy tính được.
Tại sao cần có chương trinh dịch?
ngôn ngữ lập trình bậc cao không thể nạp trực tiếp vào bộ nh thực hiện ngay như
máy nên cần chương trình dich đchuyển đổi chương trình viết bằng nn ngữ lập trình
bậc cao sang máy.
Một chương trình dịch chu trách nhiệm dịch mt chuỗi các hướng dẫn được viết bằng
mt ngôn ngữ lập trình cụ th(tức là nn ngnguồn hoặc mã nguồn) sang một chương trình
mới nhưng ở dạng ngôn ngmáy tính (ngôn ngữ đích).
Nói chung, nn ngữ đích là nn ngcấp thấp hơn được sử dụng để máy tính có thể
hiểu các hướng dẫn bằng văn bản. Ngôn ngữ duy nhất máy thể trực tiếp hiểu và thực hiện.
Trình biên dịch tạo ra mt chương trình mới còn được gọi mã đối tượng. Trong khi đó, Ngôn
ngbc cao rt gần với nn ngữ tnhiên, tính đc lập cao, ít phụ thuộc vào loi máy và
chương trình phải dịch sang ngôn ngữ máy mới thực hiện được
Hầu hết các trình biên dịch sẽ dch mã nguồn được viết bằng ngôn ngữ cấp cao sang
đối tượng hoặc nn ngmáy để được thực thi trực tiếp bi máy tính hoặc máy ảo. Tuy nhiên,
cũng trường hợp chương trình dịch có khả năng dch tngôn ngữ cấp thấp sang ngôn ngữ
cấp cao. Trình biên dịch như vy được gọi là dịch ngược. Đồng thời cũng sẽ các chương
tnh dịch từ ngôn ngữ cấp cao này sang ngôn ngữ cấp cao khác.
1.2. Quy trình của một chương trình dịch
Chương trình nguồn ---> Chương trình dịch ---> Chương trình đích
Trong đó:
Chương trình nguồn: Là chương trình viết trên ngôn ngữ lập trình bậc cao
Chương trình đích: chương trình nguồn được chuyển đổi sang ngôn ngữ máy nhờ
chương trình dịch.
1.3. Phân loại
Chương trình dch được chia thành hai loi: Thông dịch và biên dịch
1.4. Vai trò của chương trình dịch
Chương trình dch được ứng dụng để giải quyết các bài toán cụ thvà ứng dụng thực tế
hơn như:
Dch mt ngôn ngữ lập trình thành mã máy
Dch mt nn ngữ lập trình bậc cao thành một ngôn ngữ lập trình bậc thấp hơn
Chuyển đổi đoạn mã giữa các ngôn ngữ lập trình với nhau
Kim tra ngữ pháp, chính tả của các đoạn văn
Dch từ hìnhnh thành văn bản
Chương trình dch vô cùng cần thiết quan trọng trong lập trình khả năng
chuyển đổi các chương trình được viết bằng ngôn ngữ bậc cao thành các chương tnh thể
chạy trên các máy cụ thể. Nó nhận đầu vào là chương trình nguồn được viết bằng nn ngữ lp
tnh bậc cao (dữ liệu đầu vào) và sau đó chuyển đi chúng thành chương trình đích bằng ngôn
ngmáy (đầu ra).
Chương trình dịch giúp người lập trình có thể lập trình bằng mt ngôn ngữ và chuyển nó
sang một nn ngữ khác để máy tính thể đáp ứng được nhu cầu của người lập trình mong
mun.
2. Đặc điểm của chương trình dch
Một chương trình dịch hoàn thiện cần phải hội tụ đầy đủ các đặc điểm sau:
- Tính toàn vẹn: dữ liệu đầu vào viết ngôn ngữ nguồn và kết quả ở ngôn ngữ đích cần
phải hoàn toàn tương đương với nhau.
- Tính hiệu quả: chương trình dch không cần sử dụng nhiều công suất tính toán bộ
nhớ mà vẫn đảm bảo kết quả ngôn ngữ đích đủ tốt
- Tính trong suốt: chương trình dch phải ràng về kết quả để người dùng có thể chỉnh
sửa li nếu có sau mỗi bước thực hiện
- Tính chịu li tốt: chương trình dịch thể cho phép một slỗi của đầu vào đưa ra
gợi ý xử sao cho phù hợp. Một chương trình dừng ngay li đầu tiên một chương trình
không tốt.
3. Phân loại chương trình dịch
Chương trình dch được chia thành 2 loại chính là:
Trình biên dch (complier): tiếp nhận toàn bộ dữ liệu nguồn rồi dịch ra kết quả
trong mt lượt. Trình biên dịch thường được hoạt động ging như một dịch giả.
Trình thông dch (interpreter): tiếp nhận nguồn từng phần, tiến hành dịch
từng phần khi nhận được. Interpreter hoạt động giống như vai trò của một người phiên
dịch trong các cuộc giao tiếp.
Hiện nay, ranh giới giữa compiler và interpreter ngàyng thu hẹp
Trong đó, compiler cũng được chia thành 2 loi :
Complier tĩnh (statically): mã sinh ra chạy trực tiếp
Complier động (dynamically): mã sinh ra cần phải thao tác tái định vị rồi
mới tiến hành chạy được
Một loại nn ngữ lập trình kết hợp cả compiler và interpreter đó chính java. Mã java
thể được biên dịch thành mã bytecode, sau đó máy ảo chạy mã bytecode ở dạng thông dịch.
5. Các bước thực hiện của một chương trình dịch
Để một chương tnh dịch hoạt động được, phải trải qua hai giai đoạn giai đoạn
phân tích và giai đoạn tổng hợp.
Giai đoạn phân tích diễn ra để phân tích chương trình nguồn nhằm lập kế hoạch thực hiện
giai đon tiếp theo. Trong đó, quá trình phân tích sẽ bắt đầu bằng phân tích từ vựng, sau đó là
phân tích cú pháp và cuối cùng là phân tích ngữ nghĩa. Phân tíchng chi tiết t giai đoạn mã
phía sau sẽ càng đơn giản và chính xác.
Giai đoạn tổng hợp sẽ tạo ra chương trình mục tiêu bao gồm 3 bước:
- Tạo mã trung gian: nghĩa là chuyển chương trình nguồn thành chương trình trung gian
- Tối ưu hóa mã: tối ưu hóa, chnh sửa chương trình trung gian
- Tạo mã: từ chương trình trung gian được tối ưu hóa đ tạo chương trình đích
Đối với từng loi chương trinh dch các bước cụ thể như sau:
a. Thông dịch
Thực hiện lặp đi lặp lại dãy các bước sau:
-> Kiểm tra tính đúng đắn của câu lệnh tiếp theo trong chương trình nguồn
-> Chuyển đổi câu lệnh đó thành các câu lệnh tương ứng trong ngôn ngữ máy
-> Thực hiện các câu lệnh vừa chuyển đổi
Loi chương trình dch này đặc biệt tch hợp cho môi trường đối thoại giữa ngườing
hệ thng, ncác nn ngữ khai thác hệ quản trị cơ sở dữ liệu, đối thoại với hệ điều hành…
b. Biên dịch
Thực hiện qua hai ớc sau:
-> Duyệt, kim tra, phát hiện li, c định chương tnh nguồn có dịch được không
-> Dch chương trình nguồn thành mt chương trình đích thể thực hiện trên máy
lưu trữ li để sử dụng về sau
Loi chương trình dịch này thuận tin cho các chương trình n định cần thực hiện
nhiều lnKèm với chương tnh dịch, người dùng còn được cung cấp các dịch vlên quan như
biên soạn, lưu trữ... tạo tnh mt môi trường làm việc trên mt ngôn ngữ lập trình. Ví d:
Turbo Pascal 7.0, Free Pascal 1.2, Visual Pascal 2.1,...
6. Một số câu hỏi thường gặp
Câu 1
Trong chế độ biên dịch, mt chương trình đã được dịch thông suốt, hệ thng không báo
li. Có thể khẳng định rằng ta đã có mt chương trình đúng hay chưa? Tại sao?
Gợi ý trả lời:
Không thể khẳng định chương trình đúng chương trình thvẫn còn chứa li ngữ
nghĩa.
Câu 2
Trong chế độ thông dch, giả sử hai phần ba số câu lnh trong chương trình đã được thự
hiện. thể khẳng định rằng chương trình không n chứa li pháp nữa hay không? Tại
sao?
Gợi ý trả lời:
Không thể khẳng định. Cú pp của các câu lệnh chưa thực hiện chưa được kiểm tra.

Preview text:

Chương trình dịch là gì? Phân loại chương trình dịch?
1. Chương trình dịch là gì?
1.1. Khái niệm chương trình dịch
Chương trình dịch – hay còn được gọi với tên tiếng Anh là compiler, là chương trình có
chức năng chuyển đổi chương trình nguồn được viết bằng ngôn ngữ lập trình bậc cao sang
chương trình đích được thể hiện bằng ngôn ngữ máy và chương trình đích này có thể chạy
(thực thi) trên máy tính được.
Tại sao cần có chương trinh dịch?
Vì ngôn ngữ lập trình bậc cao không thể nạp trực tiếp vào bộ nhớ và thực hiện ngay như
mã máy nên cần chương trình dich để chuyển đổi chương trình viết bằng ngôn ngữ lập trình bậc cao sang mã máy.
Một chương trình dịch chịu trách nhiệm dịch một chuỗi các hướng dẫn được viết bằng
một ngôn ngữ lập trình cụ thể (tức là ngôn ngữ nguồn hoặc mã nguồn) sang một chương trình
mới nhưng ở dạng ngôn ngữ máy tính (ngôn ngữ đích).
Nói chung, ngôn ngữ đích là ngôn ngữ cấp thấp hơn được sử dụng để máy tính có thể
hiểu các hướng dẫn bằng văn bản. Ngôn ngữ duy nhất máy có thể trực tiếp hiểu và thực hiện.
Trình biên dịch tạo ra một chương trình mới còn được gọi là mã đối tượng. Trong khi đó, Ngôn
ngữ bậc cao rất gần với ngôn ngữ tự nhiên, có tính độc lập cao, ít phụ thuộc vào loại máy và
chương trình phải dịch sang ngôn ngữ máy mới thực hiện được
Hầu hết các trình biên dịch sẽ dịch mã nguồn được viết bằng ngôn ngữ cấp cao sang mã
đối tượng hoặc ngôn ngữ máy để được thực thi trực tiếp bởi máy tính hoặc máy ảo. Tuy nhiên,
cũng có trường hợp chương trình dịch có khả năng dịch từ ngôn ngữ cấp thấp sang ngôn ngữ
cấp cao. Trình biên dịch như vậy được gọi là dịch ngược. Đồng thời cũng sẽ có các chương
trình dịch từ ngôn ngữ cấp cao này sang ngôn ngữ cấp cao khác.
1.2. Quy trình của một chương trình dịch
Chương trình nguồn ---> Chương trình dịch ---> Chương trình đích Trong đó:
Chương trình nguồn: Là chương trình viết trên ngôn ngữ lập trình bậc cao
Chương trình đích: Là chương trình nguồn được chuyển đổi sang ngôn ngữ máy nhờ chương trình dịch. 1.3. Phân loại
Chương trình dịch được chia thành hai loại: Thông dịch và biên dịch
1.4. Vai trò của chương trình dịch
Chương trình dịch được ứng dụng để giải quyết các bài toán cụ thể và ứng dụng thực tế hơn như:
 Dịch một ngôn ngữ lập trình thành mã máy
 Dịch một ngôn ngữ lập trình bậc cao thành một ngôn ngữ lập trình bậc thấp hơn
 Chuyển đổi đoạn mã giữa các ngôn ngữ lập trình với nhau
 Kiểm tra ngữ pháp, chính tả của các đoạn văn
 Dịch từ hình ảnh thành văn bản
Chương trình dịch là vô cùng cần thiết và quan trọng trong lập trình vì nó có khả năng
chuyển đổi các chương trình được viết bằng ngôn ngữ bậc cao thành các chương trình có thể
chạy trên các máy cụ thể. Nó nhận đầu vào là chương trình nguồn được viết bằng ngôn ngữ lập
trình bậc cao (dữ liệu đầu vào) và sau đó chuyển đổi chúng thành chương trình đích bằng ngôn ngữ máy (đầu ra).
Chương trình dịch giúp người lập trình có thể lập trình bằng một ngôn ngữ và chuyển nó
sang một ngôn ngữ khác để máy tính có thể đáp ứng được nhu cầu của người lập trình mong muốn.
2. Đặc điểm của chương trình dịch
Một chương trình dịch hoàn thiện cần phải hội tụ đầy đủ các đặc điểm sau:
- Tính toàn vẹn: dữ liệu đầu vào viết ở ngôn ngữ nguồn và kết quả ở ngôn ngữ đích cần
phải hoàn toàn tương đương với nhau.
- Tính hiệu quả: chương trình dịch không cần sử dụng nhiều công suất tính toán và bộ
nhớ mà vẫn đảm bảo kết quả ngôn ngữ đích đủ tốt
- Tính trong suốt: chương trình dịch phải rõ ràng về kết quả để người dùng có thể chỉnh
sửa lỗi nếu có sau mỗi bước thực hiện
- Tính chịu lỗi tốt: chương trình dịch có thể cho phép một số lỗi của đầu vào và đưa ra
gợi ý xử lý sao cho phù hợp. Một chương trình dừng ngay ở lỗi đầu tiên là một chương trình không tốt.
3. Phân loại chương trình dịch
Chương trình dịch được chia thành 2 loại chính là:
 Trình biên dịch (complier): tiếp nhận toàn bộ dữ liệu nguồn rồi dịch ra kết quả
trong một lượt. Trình biên dịch thường được hoạt động giống như một dịch giả.
 Trình thông dịch (interpreter): tiếp nhận mã nguồn từng phần, tiến hành dịch
từng phần khi nhận được. Interpreter hoạt động giống như vai trò của một người phiên
dịch trong các cuộc giao tiếp.
Hiện nay, ranh giới giữa compiler và interpreter ngày càng thu hẹp
Trong đó, compiler cũng được chia thành 2 loại là:
 Complier tĩnh (statically): mã sinh ra chạy trực tiếp
 Complier động (dynamically): mã sinh ra cần phải có thao tác tái định vị rồi
mới tiến hành chạy được
Một loại ngôn ngữ lập trình kết hợp cả compiler và interpreter đó chính là java. Mã java
có thể được biên dịch thành mã bytecode, sau đó máy ảo chạy mã bytecode ở dạng thông dịch.
5. Các bước thực hiện của một chương trình dịch
Để một chương trình dịch hoạt động được, nó phải trải qua hai giai đoạn là giai đoạn
phân tích và giai đoạn tổng hợp.
Giai đoạn phân tích diễn ra để phân tích chương trình nguồn nhằm lập kế hoạch thực hiện
giai đoạn tiếp theo. Trong đó, quá trình phân tích sẽ bắt đầu bằng phân tích từ vựng, sau đó là
phân tích cú pháp và cuối cùng là phân tích ngữ nghĩa. Phân tích càng chi tiết thì giai đoạn mã
phía sau sẽ càng đơn giản và chính xác.
Giai đoạn tổng hợp sẽ tạo ra chương trình mục tiêu bao gồm 3 bước:
- Tạo mã trung gian: nghĩa là chuyển chương trình nguồn thành chương trình trung gian
- Tối ưu hóa mã: tối ưu hóa, chỉnh sửa chương trình trung gian
- Tạo mã: từ chương trình trung gian được tối ưu hóa để tạo chương trình đích
Đối với từng loại chương trinh dịch các bước cụ thể như sau: a. Thông dịch
Thực hiện lặp đi lặp lại dãy các bước sau:
-> Kiểm tra tính đúng đắn của câu lệnh tiếp theo trong chương trình nguồn
-> Chuyển đổi câu lệnh đó thành các câu lệnh tương ứng trong ngôn ngữ máy
-> Thực hiện các câu lệnh vừa chuyển đổi
Loại chương trình dịch này đặc biệt thích hợp cho môi trường đối thoại giữa người dùng
và hệ thống, như các ngôn ngữ khai thác hệ quản trị cơ sở dữ liệu, đối thoại với hệ điều hành… b. Biên dịch
Thực hiện qua hai bước sau:
-> Duyệt, kiểm tra, phát hiện lỗi, xác định chương trình nguồn có dịch được không
-> Dịch chương trình nguồn thành một chương trình đích có thể thực hiện trên máy và
lưu trữ lại để sử dụng về sau
Loại chương trình dịch này thuận tiện cho các chương trình ổn định và cần thực hiện
nhiều lầnKèm với chương trình dịch, người dùng còn được cung cấp các dịch vụ lên quan như
biên soạn, lưu trữ... tạo thành một môi trường làm việc trên một ngôn ngữ lập trình. Ví dụ:
Turbo Pascal 7.0, Free Pascal 1.2, Visual Pascal 2.1,...
6. Một số câu hỏi thường gặp Câu 1
Trong chế độ biên dịch, một chương trình đã được dịch thông suốt, hệ thống không báo
lỗi. Có thể khẳng định rằng ta đã có một chương trình đúng hay chưa? Tại sao? Gợi ý trả lời:
Không thể khẳng định chương trình đúng vì chương trình có thể vẫn còn chứa lỗi ngữ nghĩa. Câu 2
Trong chế độ thông dịch, giả sử hai phần ba số câu lệnh trong chương trình đã được thự
hiện. Có thể khẳng định rằng chương trình không còn chứa lỗi cú pháp nữa hay không? Tại sao? Gợi ý trả lời:
Không thể khẳng định. Cú pháp của các câu lệnh chưa thực hiện chưa được kiểm tra.