Trình Biên Dịch Là Gì?

Thảo luận trong 'Công Nghệ' bắt đầu bởi Táo Ngọt, 15 Tháng bảy 2021.

  1. Táo Ngọt

    Táo Ngọt Member

    Bài viết:
    Tìm chủ đề
    555
    1. Trình biên dịch có nghĩa là gì?

    [​IMG]

    Trình biên dịch là một chương trình phần mềm chịu trách nhiệm thay đổi mã được lập trình ban đầu thành một ngôn ngữ máy cơ bản hơn gần với "kim loại thô" của phần cứng hơn và máy tính có thể đọc được nhiều hơn. Mã nguồn cấp cao do nhà phát triển viết bằng ngôn ngữ lập trình cấp cao sẽ được trình biên dịch dịch sang mã đối tượng cấp thấp hơn, để làm cho kết quả "có thể tiêu hóa được" đối với bộ xử lý.

    Về mặt hình thức, đầu ra của quá trình biên dịch được gọi là mã đối tượng hoặc đôi khi là một mô-đun đối tượng. Mã đối tượng là mã máy mà bộ xử lý có thể thực hiện một lệnh tại một thời điểm.

    Trình biên dịch là cần thiết vì cách mà một bộ xử lý truyền thống thực thi mã đối tượng. Bộ xử lý sử dụng các cổng logic để định tuyến tín hiệu trên bảng mạch, điều khiển các tín hiệu cao và thấp nhị phân để làm việc đơn vị logic số học của máy tính. Nhưng đó không phải là cách một lập trình viên con người xây dựng mã: Không giống như ngôn ngữ máy nhị phân, cơ bản này, mã cấp cao ban đầu bao gồm các biến, lệnh, hàm, lệnh gọi, phương thức và các loại khác được biểu diễn bằng hỗn hợp cú pháp số học và từ vựng. Tất cả những điều đó cần phải được đưa vào một dạng mà máy tính có thể hiểu được để thực thi chương trình.


    [​IMG]

    Một trình biên dịch thực hiện bốn bước chính:

    Quét: Máy quét đọc từng ký tự một từ mã nguồn và theo dõi ký tự nào có trong dòng nào.

    Phân tích từ vựng: Trình biên dịch chuyển đổi chuỗi ký tự xuất hiện trong mã nguồn thành chuỗi ký tự (được gọi là mã thông báo), được liên kết với một quy tắc cụ thể bởi một chương trình được gọi là trình phân tích từ vựng. Bảng ký hiệu được sử dụng bởi trình phân tích từ vựng để lưu trữ các từ trong mã nguồn tương ứng với mã thông báo được tạo.

    Phân tích cú pháp: Trong bước này, phân tích cú pháp được thực hiện, bao gồm tiền xử lý để xác định xem các mã thông báo được tạo trong quá trình phân tích từ vựng có theo thứ tự thích hợp theo cách sử dụng của chúng hay không. Thứ tự chính xác của một tập hợp các từ khóa, có thể mang lại kết quả mong muốn, được gọi là cú pháp. Trình biên dịch phải kiểm tra mã nguồn để đảm bảo độ chính xác về mặt cú pháp.

    Phân tích ngữ nghĩa: Bước này bao gồm một số bước trung gian. Đầu tiên, cấu trúc của mã thông báo được kiểm tra, cùng với thứ tự của chúng đối với ngữ pháp trong một ngôn ngữ nhất định. Ý nghĩa của cấu trúc mã thông báo được trình phân tích cú pháp và phân tích diễn giải để cuối cùng tạo ra một mã trung gian, được gọi là mã đối tượng.

    Mã đối tượng bao gồm các hướng dẫn đại diện cho hành động của bộ xử lý đối với mã thông báo tương ứng khi gặp trong chương trình. Cuối cùng, toàn bộ mã được phân tích cú pháp và diễn giải để kiểm tra xem có thể thực hiện bất kỳ tối ưu hóa nào hay không. Sau khi tối ưu hóa có thể được thực hiện, các mã thông báo sửa đổi thích hợp được chèn vào mã đối tượng để tạo mã đối tượng cuối cùng, mã này được lưu bên trong tệp.

    2. Ví dụ về trình biên dịch


    [​IMG]

    Để có một ví dụ tuyệt vời về những gì một trình biên dịch thực hiện, hãy xem xét các nhận xét được lập trình viên mã hóa trong khoảng trắng của cơ sở mã, được mô tả bằng các thẻ yêu cầu máy tính "bỏ qua" văn bản chữ và số.

    Lý do mà các bình luận phải được gắn cờ là chúng hoàn toàn không thể đọc được bởi bộ xử lý. Bộ xử lý không thể hiểu các từ hoặc tín hiệu, vì vậy nó không thể tạo ra bất kỳ thứ gì từ mã nhận xét. Nhưng điều này cũng đúng phần lớn đối với các phần của mã không phải là chú thích: Một lệnh gọi hàm như "get" chẳng có nghĩa gì đối với máy tính. Vì vậy, trình biên dịch lấy mã và hiển thị nó ở dạng nhị phân để điều khiển các hoạt động logic của bộ xử lý.

    Mặc dù biên dịch rất hữu ích trong lập trình hiện đại, nhưng nó không phải là lựa chọn duy nhất có sẵn trong phát triển phần mềm. Một trong những cách tốt nhất để giải thích trình biên dịch trong máy tính hiện đại là đối chiếu nó với một phương pháp thay thế mới hơn được gọi là thông dịch, sử dụng một loại phần mềm khác được gọi là trình thông dịch để ghép mã máy lại với nhau trong thời gian chạy.

    Với trình biên dịch truyền thống, mã được biên dịch một lần trước khi thực thi.

    Ngược lại, một trình thông dịch sẽ ghép mã lại với nhau cho mọi lần thực thi theo yêu cầu.

    Đó là một phần của lời giải thích rõ ràng. Điều trở nên ít rõ ràng hơn là chính xác điều này xảy ra như thế nào và ngôn ngữ nào được biên dịch và ngôn ngữ nào được thông dịch. Ví dụ, C ++ thường được coi là một ví dụ điển hình của ngôn ngữ sử dụng trình biên dịch, mặc dù sự xuất hiện của CINT như một trình thông dịch C ++ làm cho trường hợp đó có nhiều sắc thái hơn một chút.


    [​IMG]

    Hoặc lấy trường hợp của JavaScript, thường được mô tả như một chương trình thông dịch hơn là một chương trình được biên dịch. Khi bạn tìm hiểu sâu hơn về cách kết hợp JavaScript với nhau, rõ ràng là các đoạn mã có thể được biên dịch, dẫn đến giải thích chi tiết hơn nhiều về cách hoạt động của hai quy trình này. Các chuyên gia có thể nói về việc sử dụng bytecode hoặc hướng dẫn máy ảo theo những cách khác nhau để tạo thành phân tích từ vựng, phân tích cú pháp và phân tích ngữ nghĩa của quá trình biên dịch hoặc thực hiện thông dịch trong thời gian chạy động theo yêu cầu.

    Sự xuất hiện của trình biên dịch đúng lúc như một công cụ biên dịch thời gian chạy động càng làm xáo trộn vùng nước trong việc biên dịch và thông dịch tương phản. Nói chung, một chương trình độc lập được gọi là trình thông dịch và biên dịch là cách tiếp cận cổ điển để biến các ngôn ngữ lập trình cấp cao thành mã máy. Giống như nhiều lĩnh vực khác trong thế giới khoa học máy tính, tính hiệu quả và sự phát triển đã thúc đẩy một loại phương pháp kết hợp khi sử dụng trình biên dịch và trình thông dịch để dịch cơ sở mã.
     
Từ Khóa:
Đang tải...