Hướng dẫn thiết kế trình biên dịch
Trình biên dịch là gì?
Trình biên dịch là một chương trình máy tính giúp bạn chuyển đổi mã nguồn được viết bằng ngôn ngữ cấp cao thành ngôn ngữ máy cấp thấp.
Nó dịch mã được viết bằng một ngôn ngữ lập trình sang một ngôn ngữ khác mà không thay đổi ý nghĩa của mã. Trình biên dịch cũng làm cho mã kết quả được tối ưu hóa cho thời gian thực hiện và không gian bộ nhớ.
Quá trình biên dịch bao gồm các cơ chế dịch thuật cơ bản và phát hiện lỗi. Quá trình biên dịch đi qua phân tích từ vựng, cú pháp và phân tích ngữ nghĩa ở giao diện người dùng, tạo mã và tối ưu hóa mã ở phía sau.
Các tính năng của trình biên dịch
- Sự chính xác.
- Tốc độ biên dịch.
- Giữ nguyên ý nghĩa của mã.
- Tốc độ của mã đích.
- Nhận ra các cấu trúc chương trình hợp lệ và không hợp lệ.
- Báo cáo / xử lý lỗi tốt.
- Mã trợ giúp gỡ lỗi.
Các loại trình biên dịch
- Trình biên dịch một lần.
- Trình biên dịch hai lần.
- Trình biên dịch nhiều lần.
Trình biên dịch một lần
Trình biên dịch trực tiếp chuyển đổi mã nguồn thành mã máy. Ví dụ, ngôn ngữ Pascal.
Trình biên dịch hai lần
Trình biên dịch hai lần được chia thành hai giai đoạn.
- Font end: Nó ánh xạ mã hợp lệ thành mã trung gian (IR).
- Back end: Nó ánh xạ IR thành mã thực thi trên máy đích.
Phương pháp trình biên dịch hai lần cho phép chương trình chạy được trên nhiều nên tảng khác nhau mà không phải viết lại trình biên dịch. Ví dụ: ngôn ngữ lập trình Java, C#.
Trình biên dịch nhiều lần
Trình biên dịch nhiều lần xử lý mã nguồn hoặc cây cú pháp của một chương trình nhiều lần.
Nó chia một chương trình lớn thành nhiều chương trình nhỏ và xử lý chúng. Nó phát triển nhiều mã trung gian.
Tất cả các bội số này lấy đầu ra của pha trước làm đầu vào. Vì vậy, nó đòi hỏi ít bộ nhớ hơn. Nó còn được gọi là ‘Trình biên dịch rộng’.
Nhiệm vụ của trình biên dịch
Các tác vụ chính được thực hiện bởi trình biên dịch là:
- Chia chương trình nguồn thành từng phần và áp đặt cấu trúc ngữ pháp lên chúng.
- Cho phép bạn xây dựng chương trình mục tiêu mong muốn từ đại diện trung gian và cũng tạo bảng ký hiệu.
- Biên dịch mã nguồn và phát hiện lỗi trong đó.
- Quản lý lưu trữ tất cả các biến và mã.
- Hỗ trợ biên dịch riêng biệt.
- Đọc, phân tích toàn bộ chương trình và dịch sang ngôn ngữ khác tương đương về mặt ngữ nghĩa.
- Dịch mã nguồn thành mã đối tượng tùy thuộc vào loại máy.
Lịch sử trình biên dịch
Lịch sử của trình biên dịch như sau:
- Từ “trình biên dịch” được sử dụng lần đầu tiên vào đầu những năm 1950 bởi Grace Murray Hopper.
- Trình biên dịch đầu tiên được xây dựng bởi John Backum và nhóm của ông từ năm 1954 đến 1957 tại IBM.
- COBOL là ngôn ngữ lập trình đầu tiên được biên dịch trên nhiều nền tảng vào năm 1960.
- Nghiên cứu về các vấn đề quét và phân tích cú pháp đã được theo đuổi trong những năm 1960 và 1970 để cung cấp một giải pháp hoàn chỉnh.
Các bước cho hệ thống xử lý ngôn ngữ
Trước khi biết về khái niệm trình biên dịch, trước tiên bạn cần hiểu một vài công cụ khác hoạt động với trình biên dịch.
- Bộ tiền xử lý (Preprocessor): Bộ tiền xử lý được coi là một phần của trình biên dịch. Nó là một công cụ tạo đầu vào cho trình biên dịch. Nó liên quan đến xử lý vĩ mô, tăng cường, mở rộng ngôn ngữ, v.v.
- Trình thông dịch (Interpreter): Trình thông dịch giống như trình biên dịch, dịch ngôn ngữ cấp cao sang ngôn ngữ máy cấp thấp. Sự khác biệt chính giữa cả hai là trình thông dịch đọc và biến đổi dòng mã theo từng dòng. Trình biên dịch đọc toàn bộ mã cùng một lúc và tạo mã máy.
- Trình biên dịch hợp ngữ (Assembler): Nó dịch mã hợp ngữ (assembly) thành ngôn ngữ máy. Kết quả đầu ra của trình biên dịch hợp ngữ được gọi là một tệp đối tượng là sự kết hợp của chỉ thị máy cũng như dữ liệu cần thiết để lưu trữ các chỉ thị này trong bộ nhớ.
- Trình liên kết (Linker): Trình liên kết giúp bạn liên kết và hợp nhất các tệp đối tượng khác nhau để tạo thành một tệp thực thi. Tất cả các tệp này có thể đã được biên dịch với các trình biên dịch riêng biệt. Nhiệm vụ chính của một trình liên kết là tìm kiếm các mô-đun được gọi trong một chương trình và tìm ra vị trí bộ nhớ nơi tất cả các mô-đun được lưu trữ.
- Trình tải (Loader): Trình tải là một phần của hệ điều hành (HĐH), thực hiện các tác vụ tải các tệp thực thi vào bộ nhớ và chạy chúng. Nó cũng tính toán kích thước của một chương trình tạo thêm không gian bộ nhớ.
- Trình biên dịch chéo (Cross-compiler): Trình biên dịch chéo tạo mã thực thi đa nền tảng.
- Trình biên dịch mã nguồn(Source-to-source Compiler): Trình biên dịch nguồn thành nguồn là thuật ngữ được sử dụng khi mã nguồn của một ngôn ngữ lập trình được dịch sang mã nguồn của ngôn ngữ khác.
Công cụ xây dựng trình biên dịch
Các công cụ xây dựng trình biên dịch đã được giới thiệu khi các công nghệ liên quan đến máy tính lan rộng khắp thế giới.
Các công cụ này sử dụng ngôn ngữ hoặc thuật toán cụ thể để chỉ định và triển khai thành phần của trình biên dịch.
- Trình tạo máy quét: Công cụ này lấy các biểu thức thông thường làm đầu vào. Ví dụ: LEX cho hệ điều hành Unix.
- Các công cụ dịch hướng cú pháp: Các công cụ phần mềm này cung cấp một mã trung gian bằng cách sử dụng cây phân tích cú pháp. Nó có một mục tiêu là liên kết một hoặc nhiều bản dịch với mỗi nút của cây phân tích cú pháp.
- Trình phân tích cú pháp: Trình phân tích cú pháp lấy ngữ pháp làm đầu vào và tự động tạo mã nguồn có thể phân tích các luồng ký tự với sự trợ giúp của ngữ pháp.
- Trình tạo mã tự động: Lấy mã trung gian và chuyển đổi chúng thành mã máy
- Công cụ luồng dữ liệu: Công cụ này hữu ích cho việc tối ưu mã. Ở đây, thông tin được cung cấp bởi người dùng và mã trung gian được so sánh để phân tích bất kỳ mối quan hệ nào. Nó còn được gọi là phân tích luồng dữ liệu. Nó giúp bạn tìm ra cách các giá trị được truyền từ một phần của chương trình sang một phần khác.
Tại sao nên sử dụng trình biên dịch?
- Trình biên dịch xác minh toàn bộ chương trình, do đó không có lỗi cú pháp hoặc ngữ nghĩa.
- Tệp thực thi được tối ưu hóa bởi trình biên dịch, vì vậy nó được thực thi nhanh hơn.
- Cho phép bạn tạo cấu trúc nội bộ trong bộ nhớ.
- Không cần biên dịch lại chương trình trên cùng một máy đã được biên dịch.
- Dịch toàn bộ chương trình sang ngôn ngữ khác.
- Tạo tập tin trên đĩa.
- Liên kết các tập tin thành một định dạng thực thi.
- Kiểm tra lỗi cú pháp và kiểu dữ liệu.
- Giúp bạn nâng cao hiểu biết về ngữ nghĩa ngôn ngữ.
- Giúp xử lý các vấn đề về hiệu suất ngôn ngữ.
- Cơ hội cho một dự án lập trình không quan trọng.
- Các kỹ thuật được sử dụng để xây dựng trình biên dịch cũng có thể hữu ích cho các mục đích khác.
Ứng dụng Trình biên dịch
- Thiết kế trình biên dịch giúp thực hiện đầy đủ các ngôn ngữ lập trình cấp cao.
- Hỗ trợ tối ưu hóa cho kiến trúc máy tính song song.
- Thiết kế hệ thống phân cấp bộ nhớ mới của máy móc.
- Được sử dụng rộng rãi cho các chương trình dịch.
- Được sử dụng với các công cụ sản xuất phần mềm khác.
Tóm lược
- Trình biên dịch là một chương trình máy tính giúp bạn chuyển đổi mã nguồn được viết bằng ngôn ngữ cấp cao thành ngôn ngữ máy cấp thấp.
- Tính chính xác, tốc độ biên dịch, giữ đúng ý nghĩa của mã là một số tính năng quan trọng của thiết kế trình biên dịch.
- Trình biên dịch được chia thành ba loại 1) Trình biên dịch một lần 2) Trình biên dịch hai lần và 3) Trình biên dịch nhiều lần.
- “Trình biên dịch” là từ đầu tiên được sử dụng vào đầu những năm 1950 bởi Grace Murray Hopper.
- Các bước cho hệ thống xử lý ngôn ngữ là: Bộ tiền xử lý, Trình thông dịch, Trình biên dịch hợp ngữ, Trình liên kết / Trình tải.
- Các công cụ xây dựng trình biên dịch quan trọng là 1) Trình tạo máy quét, 2) Cú pháp, 3) Công cụ dịch theo hướng, 4) Trình phân tích cú pháp, 5) Trình tạo mã tự động.
- Nhiệm vụ chính của trình biên dịch là xác minh toàn bộ chương trình, do đó không có lỗi cú pháp hoặc ngữ nghĩa.