Chương trình dịch là phần mềm được các nhà phát triển và lập trình viên sử dụng rất dùng nhiều. Trong bài viết này, mời các bạn cùng Quantrimang tìm hiểu chương trình dịch là gì.
Chương trình dịch là gì?
Chương trình dịch tên tiếng anh là compiler và còn được gọi là trình biên dịch. Nhiệm vụ của chương trình dịch là dịch một chuỗi các câu lệnh được viết bằng một ngôn ngữ lập trình cụ thể (hay còn được gọi là ngôn ngữ nguồn hoặc mã nguồn) thành một chương trình mới nhưng dưới dạng một ngôn ngữ máy tính (hay còn gọi là ngôn ngữ đích. Thông thường, ngôn ngữ đích là ngôn ngữ ở cấp thấp hơn được dùng để cho máy tính hiểu được các câu lệnh. Chương trình mới được được chương trình dịch tạo ra này còn được gọi là mã đối tượng.
Hầu hết các chương trình dịch sẽ chuyển dịch mã nguồn viết trong một ngôn ngữ cấp cao thành mã đối tượng hay ngôn ngữ máy để có thể được thi hành trực tiếp bởi một máy tính hoặc một máy ảo. Tuy nhiên, cũng có những chương trình dịch có khả năng dịch từ một ngôn ngữ cấp thấp sang một ngôn ngữ cấp cao hơn. Nhưng chương trình dịch dạng này được gọi là bộ biên dịch ngược. Đương nhiên, cũng có những chương trình dịch có khả năng dịch từ ngôn ngữ cấp cao này sang ngôn ngữ cấp cao khác.
Chương trình dịch hoạt động như thế nào?
Chương trình dịch có nhiều phương pháp khác nhau để phân tích và chuyển đổi mã nguồn thành code đầu ra. Bất chấp sự khác biệt, chúng thường thực hiện các bước sau:
- Phân tích từ vị. Chương trình dịch chia mã nguồn thành các từ vị, là những đoạn code riêng lẻ đại diện cho các mẫu cụ thể trong code. Các từ vị sau đó được mã hóa để chuẩn bị cho việc phân tích cú pháp và ngữ nghĩa.
- Phân tích cú pháp. Chương trình dịch xác minh rằng cú pháp của code là chính xác, dựa trên các quy tắc dành cho ngôn ngữ nguồn. Quá trình này còn được gọi là phân tích cú pháp. Trong bước này, chương trình dịch thường tạo các cây cú pháp trừu tượng thể hiện cấu trúc logic của những thành phần code cụ thể.
- Phân tích ngữ nghĩa. Chương trình dịch xác minh tính hợp lệ logic của code. Bước này vượt xa việc phân tích cú pháp bằng cách xác thực tính chính xác của code. Ví dụ, phân tích ngữ nghĩa có thể kiểm tra xem các biến đã được gán đúng loại hay đã được khai báo đúng hay chưa.
- Tạo mã IR. Sau khi code trải qua cả 3 giai đoạn phân tích, chương trình dịch sẽ tạo ra biểu diễn trung gian (IR) của mã nguồn. Mã IR giúp dịch mã nguồn sang định dạng khác dễ dàng hơn. Tuy nhiên, nó phải thể hiện chính xác mã nguồn ở mọi khía cạnh, không bỏ sót bất kỳ chức năng nào.
- Tối ưu hóa. Chương trình dịch tối ưu hóa mã IR để chuẩn bị cho việc tạo code cuối cùng. Loại và mức độ tối ưu hóa phụ thuộc vào chương trình dịch. Một số chương trình dịch cho phép người dùng cấu hình mức độ tối ưu hóa.
- Tạo code đầu ra. Chương trình dịch tạo code đầu ra cuối cùng bằng cách sử dụng mã IR được tối ưu hóa.
Chương trình dịch đôi khi bị nhầm lẫn với các chương trình được gọi là trình thông dịch. Mặc dù cả hai đều tương tự nhưng chúng khác nhau ở những điểm quan trọng. Chương trình dịch phân tích và chuyển đổi mã nguồn được viết bằng các ngôn ngữ như Java, C++, C# hoặc Swift. Chúng thường được sử dụng để tạo mã máy hoặc mã byte có thể được thực thi bởi hệ thống máy chủ đích.
Trình thông dịch không tạo mã IR hoặc lưu mã máy đã tạo. Chúng xử lý codetheo từng câu lệnh trong runtime mà không cần chuyển đổi trước code hoặc chuẩn bị trước cho một nền tảng cụ thể. Trình thông dịch được sử dụng cho code được viết bằng các ngôn ngữ kịch bản như Perl, PHP, Ruby hoặc Python.
Tại sao chúng ta cần phải có chương trình dịch?
Chúng ta cần phải có chương trình dịch bởi vì nó sẽ giúp chúng ta chuyển đổi chương trình được viết bằng ngôn ngữ bậc cao thành chương trình thực hiện được trên máy tính cụ thể.