Compiler là gì?
Compiler là phần mềm biên dịch có khả năng đọc các chương trình viết bằng ngôn ngữ từ cấp thấp đến cấp cao. Bên cạnh đó, Compiler còn báo cáo các lỗi đang tồn tại trong chương trình. Compiler sẽ có trách nhiệm chuyển đổi mã nguồn trong một lần hoặc nhiều lần. Người dùng sẽ nhận được mã đã qua phiên dịch và thực thi lệnh.
![Compiler là gì?](https://lanit.com.vn/wp-content/uploads/2024/07/compiler-la-gi-2.jpg)
Quá trình Compiler chia thành 2 giai đoạn chính:
- Phân tích: Trong giai đoạn này, chương trình sẽ được chia thành các phần có cấu thành cơ bản. Chương trình thực hiện kiểm tra ngữ pháp, cú pháp, ngữ nghĩa khi đã tạo mã trung gian.
- Tổng hợp: Giai đoạn cuối trong đó mã trung gian sẽ được tối ưu hoá và tạo ra mã đích.
Nhiệm vụ Chính của Compiler
Compiler đảm nhận vai trò quan trọng trong quá trình chạy mã máy tính, một số công việc chính của Compiler là:
Phân tích từ vựng
Đây là giai đoạn đầu trước khi bắt đầu quét mã nguồn. Trong giai đoạn này Compiler tiến hành:
- Xác định đơn vị từ vựng thuộc Source
- Xác định mã thông báo không thuộc phần ngôn ngữ
- Phân loại đơn vị từ
- Sắp xếp các từ khoá theo từng bảng giúp lược bỏ comment trong chương trình nguồn
Phân tích cú pháp
Compiler có nhiệm vụ khám phá cấu trúc tồn tại trong bảng đảm bảo việc lập trình chính xác
- Phát hiện và báo cáo lỗi cú pháp
- Kiểm tra biểu thức sao cho phù hợp
- Lấy mã thông báo từ trình phân tích từ vựng
- Xây dựng cấu trúc cây nhị phân, phân cấp
Tạo mã trung gian
Quá trình phân tích sẽ tạo ra mã trung gian hỗ trợ hoạt động máy
- Mã trung gian được tạo ra dựa trên ngữ nghĩa của chương trình nguồn.
- Compiler sẽ lưu trữ tất cả các giá trị tính toán.
- Mã trung gian có thể được chuyển đổi sang ngôn ngữ đích.
- Hỗ trợ lập trình viên duy trì thứ tự ưu tiên trong ngôn ngữ nguồn.
- Đảm bảo tính toàn vẹn của các toán hạng trong lệnh.
![Compiler đảm nhận vai trò quan trọng trong quá trình chạy mã máy tính](https://lanit.com.vn/wp-content/uploads/2024/07/compiler-la-gi-3.jpg)
Phân tích ngữ nghĩa
Kết hợp cây cú pháp và bảng ký hiệu để đảm bảo mã nguồn phù hợp ngữ nghĩa
- Thu thập và lưu trữ thông tin về kiểu dữ liệu trong bảng ký hiệu hoặc cây cú pháp.
- Cho phép kiểm tra tính hợp lệ của kiểu dữ liệu.
- Ngay khi phát hiện kiểu dữ liệu không khớp, lỗi ngữ nghĩa sẽ được báo cáo.
- Thu thập thông tin và kiểm tra tính tương thích của kiểu dữ liệu.
- Xác minh xem ngôn ngữ nguồn có thể sử dụng các toán hạng hay không.
Tối ưu mã
Loại bỏ các mã không cần thiết, sắp xếp lại chuỗi câu lệnh. Nhờ đó tăng tốc độ thực thi chương trình, tránh lãng phí tài nguyên
- Điều chỉnh mối quan hệ giữa tốc độ thực thi và tốc độ biên dịch.
- Loại bỏ các câu lệnh không thay đổi trong vòng lặp.
- Tối ưu hóa thời gian chạy của chương trình đích.
- Loại bỏ các mã không thể truy cập và các biến không sử dụng.
Tạo mã
Giai đoạn cuối trong quá trình Compiler. Giai đoạn này có chức năng phân bổ lưu trữ và hỗ trợ tạo mã máy.
Ưu điểm – hạn chế của Compiler
Dưới đây là những ưu và nhược điểm của Compiler:
Về ưu điểm:
- Không có hiện tượng dịch ngược mã nguồn.
- Trình biên dịch có độ tin cậy cao và bảo mật tốt.
- Chương trình thường chạy nhanh hơn so với ngôn ngữ thông dịch.
- Hỗ trợ đa luồng và giao dịch.
Hạn chế
- Hạn chế nền tảng
- Thực hiện compiler khó chính xác cao bởi độ phức tạp khi dịch toàn bộ chương trình sang mã máy.
Phân biệt Compiler và Interpreter
Bên cạnh Compiler thì chắc hẳn bạn cũng đã nghe tới thuật ngữ Interpreter. Đều là chương trình trung gian hỗ trợ quá trình làm việc với máy tính, vậy điểm khác biệt giữa Interpreter và Compiler là gì?
Aspect | Interpreter | Compiler |
---|---|---|
Phương pháp dịch mã | Dịch từng câu lệnh ngay tại thời điểm thực hiện | Quét toàn bộ chương trình một lần |
Ngôn ngữ sử dụng chính | Python, Perl, Matlab, Ruby… | C, C++, C# |
Yêu cầu mã nguồn | Yêu cầu mã nguồn cho thực thi sau này | Không yêu cầu mã nguồn cho thực thi sau này |
Thời gian phân tích mã | Ít thời gian phân tích, nhưng tổng thời gian thực thi chậm | Nhiều thời gian phân tích, nhưng tổng thời gian thực thi nhanh |
Xử lý lỗi | Dừng ngay khi phát hiện lỗi | Tạo báo cáo lỗi sau khi chuyển đổi toàn bộ mã lệnh |
Lưu trữ mã máy | Lưu trữ mã máy dưới dạng mã máy trên đĩa | Không lưu trữ mã máy |
Mô hình hoạt động | Dựa trên mô hình tải ngôn ngữ dịch thuật | Dựa trên phương pháp diễn giải |
![Phân biệt Compiler và Interpreter](https://lanit.com.vn/wp-content/uploads/2024/07/compiler-la-gi-4.jpg)
Lời kết
Trên đây là những thông tin bạn cần biết để hiểu Compiler là gì? Hy vọng LANIT đã mang lại những thông tin hữu ích cho bạn. Nếu còn điều gì thắc mắc thì đừng ngần ngại để lại bình luận để LANIT giải đáp nhanh nhất nhé!