Compiler Là Gì? So Sánh Compiler Và Interpreter

Nếu muốn máy tính thực thi và hiểu câu lệnh nhanh chóng thì bạn cần quá trình Compiler. Vậy bạn đã thực sự hiểu Compiler là gì? Hãy cùng LANIT tìm hiểu ngay sau đây.

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ì?
Compiler là gì?

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
Compiler đảm nhận vai trò quan trọng trong quá trình chạy mã máy tính

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ì?

AspectInterpreterCompiler
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ệnQuét toàn bộ chương trình một lần
Ngôn ngữ sử dụng chínhPython, Perl, Matlab, Ruby…C, C++, C#
Yêu cầu mã nguồnYêu cầu mã nguồn cho thực thi sau nàyKhô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ậmNhiều thời gian phân tích, nhưng tổng thời gian thực thi nhanh
Xử lý lỗiDừng ngay khi phát hiện lỗiTạo báo cáo lỗi sau khi chuyển đổi toàn bộ mã lệnh
Lưu trữ mã máyLưu trữ mã máy dưới dạng mã máy trên đĩaKhông lưu trữ mã máy
Mô hình hoạt độngDựa trên mô hình tải ngôn ngữ dịch thuậtDựa trên phương pháp diễn giải
Phân biệt Compiler và Interpreter
Phân biệt Compiler và Interpreter

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é!

avata Hải

Triệu Huyền Trang

Triệu Huyền Trang chuyên gia 3 năm kinh nghiệm trong ngành Công Nghệ, Phần Mềm. Chuyên chia sẻ các kiến thức phần mềm mã nguồn, ứng dụng và thông tin về công nghệ hữu ích.

Chat với chúng tôi qua Zalo!
Chat với chúng tôi qua Zalo!