Thiết kế trình biên dịch là gì? Các loại, Công cụ xây dựng, Ví dụ
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 sang ngôn ngữ máy cấp thấp. Nó dịch mã được viết bằng ngôn ngữ lập trình này sang ngôn ngữ lập trình khác mà không làm thay đổi ý nghĩa của mã. Trình biên dịch cũng giúp mã cuối hoạt động hiệu quả, được tối ưu hóa về thời gian thực thi và dung lượng 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 trải qua phân tích từ vựng, cú pháp và ngữ nghĩa ở mặt trước cũng như tạo và tối ưu hóa mã ở mặt sau.
Các tính năng của trình biên dịch
- Tính đúng đắn
- Tốc độ biên soạn
- Giữ đúng ý nghĩa của mã
- Tốc độ của mã mục tiêu
- Nhận biết các cấu trúc chương trình hợp pháp và bất hợp pháp
- Báo cáo/xử lý lỗi tốt
- Trợ giúp gỡ lỗi mã
Các loại trình biên dịch
Sau đây là các loại trình biên dịch khác nhau:
- Trình biên dịch một lần
- Hai trình biên dịch Pass
- Trình biên dịch đa luồng
Trình biên dịch một lần
Trong một lần mã nguồn Trình biên dịch chuyển đổi trực tiếp thành mã máy. Ví dụ: ngôn ngữ Pascal.
Trình biên dịch hai pass
Trình biên dịch hai lần được chia thành hai phần, cụ thể là:
- Giao diện người dùng: Nó ánh xạ mã pháp lý vào Đại diện trung gian (IR).
- Mặt sau: Nó ánh xạ IR vào máy mục tiêu
Phương pháp biên dịch Two pass cũng đơn giản hóa quá trình nhắm mục tiêu lại. Nó cũng cho phép nhiều giao diện người dùng.
Trình biên dịch đa luồng
Trình biên dịch nhiều lần xử lý mã nguồn hoặc cây cú pháp của 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 phép nhân 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 nhiệm 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 nhiều phần và áp đặt cấu trúc ngữ pháp cho chúng
- Cho phép bạn xây dựng chương trình mục tiêu mong muốn từ biểu 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
- Đọc, phân tích toàn bộ chương trình và dịch sang ngôn ngữ tương đương
- Dịch mã nguồn thành mã đối tượng tùy thuộc vào loại máy
Lịch sử của trình biên dịch
Mốc quan trọng của lịch sử Trình biên dịch như sau:
- Từ “trình biên dịch” được Grace Murray Hopper sử dụng lần đầu tiên vào đầu những năm 1950.
- Trình biên dịch đầu tiên được John Backum và nhóm của ông xây dựng từ năm 1954 đến năm 1957 tại IBM.
- COBOL là người đầu tiên ngôn ngữ lập trình được biên soạn 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 tìm hiểu về khái niệm trình biên dịch, trước tiên bạn cần hiểu một số công cụ khác hoạt động với trình biên dịch.
- Bộ tiền xử lý: 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ý macro, tăng cường, mở rộng ngôn ngữ, v.v.
- Phiên dịch viên: 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à chuyển đổi từng dòng mã. Trình biên dịch đọc toàn bộ mã cùng một lúc và tạo mã máy.
- Nhà lắp ráp: Nó dịch mã hợp ngữ thành ngôn ngữ máy có thể hiểu được. Kết quả đầu ra của trình biên dịch mã được gọi là tệp đối tượng, là sự kết hợp của lệnh máy cũng như dữ liệu cần thiết để lưu trữ các lệnh này trong bộ nhớ.
- 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 bằng các trình biên dịch riêng biệt. Nhiệm vụ chính của trình liên kết là tìm kiếm các mô-đun được gọi trong chương trình và tìm ra vị trí bộ nhớ nơi lưu trữ tất cả các mô-đun.
- Loader: Trình tải là một phần của HĐH, thực hiện nhiệm 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 chương trình để tạo thêm dung lượng bộ nhớ.
- Trình biên dịch chéo: Trình biên dịch chéo trong thiết kế trình biên dịch là một nền tảng giúp bạn tạo mã thực thi.
- Trình biên dịch nguồn-nguồn: Trình biên dịch nguồn sang nguồn là một 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 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. Chúng cũng được gọi là trình biên dịch, trình biên dịch hoặc trình dịch.
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. Sau đây là ví dụ về các công cụ xây dựng trình biên dịch.
- Máy phát điện máy quét: Công cụ này lấy biểu thức chính quy làm đầu vào. Ví dụ LEX cho Unix Operahệ thống ting.
- Công cụ dịch thuật theo cú pháp: Những Công cụ phần mềm cung cấp mã trung gian bằng cách sử dụng cây phân tích cú pháp. Nó có mục tiêu 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 tạo trình phân tích cú pháp: Trình tạo bộ 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.
- Máy tạo mã tự động: Lấy mã trung gian và chuyển đổi chúng thành Ngôn ngữ máy.
- Động cơ luồng dữ liệu: Công cụ này hữu ích cho việc tối ưu hóa mã. Tại đâ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 hiểu cách các giá trị được truyền từ phần này sang phần khác của chương trình.
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 trình biên dịch tối ưu hóa nên nó được thực thi nhanh hơn.
- Cho phép bạn tạo cấu trúc bên trong trong bộ nhớ.
- Không cần phải thực thi chương trình trên cùng một máy đã được tạo.
- 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 tầm thườ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 của trình biên dịch
- Thiết kế trình biên dịch giúp triển khai đầy đủ các ngôn ngữ lập trình cấp cao.
- Hỗ trợ tối ưu hóa cho Máy tính Archicấu trúc 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 thuật.
- Được sử dụng với các Công cụ năng suất phần mềm khác.
Tổng kết
- 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 sang ngôn ngữ máy cấp thấp.
- Tính chính xác, tốc độ biên dịch, bảo toàn đú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 phần 1) Trình biên dịch một lượt 2) Trình biên dịch hai lượt và 3) Trình biên dịch nhiều lượt.
- “Trình biên dịch” là từ được Grace Murray Hopper sử dụng lần đầu tiên vào đầu những năm 1950.
- Các bước của hệ thống xử lý ngôn ngữ là: Tiền xử lý, Trình thông dịch, Trình biên dịch, 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ông cụ dịch thuật theo cú pháp, 3) Trình tạo trình phân tích cú pháp, 4) 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.