✨Trình biên dịch của trình biên dịch

Trình biên dịch của trình biên dịch

Một "trình biên dịch của trình biên dịch" hay "chương trình sinh trình biên dịch" (tiếng Anh: compiler-compiler) là một công cụ tạo ra bộ phân tích cú pháp, trình thông dịch hoặc trình biên dịch từ một dạng mô tả hình thức nào đó của một ngôn ngữ và máy tính. Dạng sơ khai nhất nhưng vẫn phổ biến của chương trình sinh trình biên dịch là trình sinh bộ phân tích cú pháp với đầu vào là một văn phạm (thường dưới dạng BNF của một ngôn ngữ lập trình và đầu ra là mã nguồn của một bộ phân tích cú pháp thường được sử dụng như một thành phần của trình biên dịch.

Compiler-compiler lý tưởng nhận một mô tả của ngôn ngữ lập trình và một kiến trúc tập lệnh đầu ra và tự động sinh ra một trình biên dịch có thể sử dụng được. Trong thực tế, mức độ phát triển hiện tại vẫn chưa đạt đến độ phức tạp này và hầu hết trình sinh trình biên dịch không thể xử lý được ngữ nghĩa của thông tin về kiến trúc đầu ra.

Các biến thể

Một trình sinh bộ phân tích cú pháp điển hình gắn mã nguồn thực thi được với mỗi luật của văn phạm. Mã nguồn sẽ được thực thi khi luật đó được áp dụng bởi bộ phân tích. Những đoạn mã nguồn này đôi khi được gọi là tiểu trình ngữ nghĩa vì chúng xác định ngữ nghĩa của cấu trúc ngữ pháp đang được phân tích. Dựa vào kiểu bộ phân tích cần sinh ra, các tiểu trình này có thể xây dựng cây phân tích (hoặc cây phân tích trừu tượng) hoặc sinh trực tiếp ra mã lệnh.

Một vài compiler-compiler thử nghiệm nhận đầu vào là mô tả hình thức của ngữ nghĩa của một ngôn ngữ lập trình, điển hình là sử dụng denotational semantics. Cách tiếp cận này thường được gọi là "biên dịch dựa ngữ nghĩa" mà người tiên phong là Peter Mosses' Semantic Implementation System (SIS) in 1978. Tuy nhiên, cả trình biên dịch dược sinh ra và mã lệnh nó tạo ra đều không hiệu quả về thời gian và bộ nhớ. Hiện tại không có trình biên dịch thành phẩm nào được xây dựng theo cách này tuy nhiên các nghiên cứu vẫn đang tiếp tục.

Dự án Production Quality Compiler-Compiler ở Đại học Carnegie-Mellon không hình thức hoá ngữ nghĩa nhưng có một framework bán hình thức cho mô tả máy tính.

Compiler-compiler tồn tại dưới nhiều hình thức, bao gồm cả bottom-up rewrite machine generators (xem [http://jburg.sourceforge.net/ JBurg]) và trình sinh bộ phân tích văn phạm thuộc tính (ví dụ ANTLR có thể được dùng để kiểm tra kiểu, lan truyền hằng số và hơn nữa đồng thời với pha phân tích cú pháp).

Lịch sử

Compiler-compiler đầu tiên sử dụng tên gọi này được viết bởi Tony Brooker năm 1960 và được sử dụng để tạo ra trình biên dịch cho máy tính Atlas ở Đại học Manchester, gồm cả trình biên dịch Atlas Autocode. Tuy nhiên nó khá khác so với các trình sinh trình biên dịch hiện đại và có thể được xếp vào giữa một trình biên dịch tổng quát có khả năng tuỳ chỉnh cao và một ngôn ngữ có khả năng mở rộng. Tên gọi "compiler-compiler" phù hợp với hệ thống của Brooker hơn nhiều so với những hệ thống ngày nay. Hầu như chắc chắn rằng cái tên "Compiler Compiler" đã trở nên phổ biến do Yacc hơn là công trình của Brooker's.

Một số ví dụ khác của trình sinh bộ phân tích cú pháp là ANTLR, Coco/R, CUP, GNU bison, Eli, FSL, SableCC và JavaCC.

Một vài compiler-compiler

ANTLR Bison Coco/R ELI, bộ công cụ tích hợp cho việc xây dựng trình biên dịch. Lemon parboiled, thư viện Java cho bộ phân tích cú pháp. Packrat parser PQCC *Yacc

Các chủ đề liên quan

LL, LR, SLR, LALR, *GLR,

👁️ 12 | ⌚2025-09-03 20:58:28.584
Mua hàng tại Shopee giảm thêm 30%

Một "trình biên dịch của trình biên dịch" hay "chương trình sinh trình biên dịch" (tiếng Anh: compiler-compiler) là một công cụ tạo ra bộ phân tích cú pháp, trình thông dịch hoặc trình biên
thumb|Minh họa mã nguồn [[Java (programming language)|Java với comment **mở đầu** được biểu thị bằng màu **đỏ** và comment **nội dòng** bằng màu **lục**. **Mã chương trình** là bằng màu **lam**.]]Trong lập
**Romcc** là một trình biên dịch C tạo ra mã chỉ sử dụng các thanh ghi để lưu trữ các biến, thay vì dùng RAM. Nó được thiết kế để bổ trợ cho khởi đầu
**Watcom C / C ++** (hiện tại là **Open Watcom C / C ++**) là một sản phẩm môi trường phát triển tích hợp (IDE) của Watcom International Corporation cho ngôn ngữ lập trình C,
**Pascal** là một ngôn ngữ lập trình cho máy tính thuộc dạng mệnh lệnh và thủ tục, được Niklaus Wirth phát triển vào năm 1970. Pascal là ngôn ngữ lập trình đặc biệt thích hợp
phải|Biểu đồ hoạt động của một trình biên dịch lý tưởng. **Trình biên dịch** () hay **phần mềm biên dịch** là một chương trình máy tính làm công việc dịch một chuỗi các câu lệnh
nhỏ| Chương trình máy tính "Xin chào, thế giới" của [[Brian Kernighan (1978) ]] **Chương trình máy tính** là tập hợp các câu lệnh thực hiện một tác vụ cụ thể khi được máy tính
**D** là một ngôn ngữ lập trình hệ thống hướng đối tượng, dùng câu lệnh, đa mẫu hình do Walter Bright của Digital Mars tạo ra và phát hành năm 2001. Quá trình thiết kế
**Bộ trình dịch GNU** ( - thường được viết tắt thành **GCC**) là một tập hợp các trình biên dịch được thiết kế cho nhiều ngôn ngữ lập trình khác nhau. GCC là một thành
Trong lập trình máy tính, một **triển khai của ngôn ngữ lập trình** là một hệ thống để thực thi chương trình máy tính. Có hai cách tiếp cận chung để triển khai một ngôn
**Quản lý bờ biển** là phòng chống lũ lụt và xói mòn và một số biện pháp kĩ kỹ thuật để ngăn chặn xói mòn để giữ đất. Các vùng ven biển chiếm dưới 15%
**Go** là một ngôn ngữ lập trình mới do Google thiết kế và phát triển. Nó được kỳ vọng sẽ giúp ngành công nghiệp phần mềm khai thác tối đa nền tảng đa lõi của
**Trình sinh bộ phân tích cú pháp** (tiếng Anh: _Parser Generator_) là một chương trình lấy dữ liệu nhập là một bộ văn phạm và cho ra kết quả là một bộ phân tích cú
**World Editor** hay **WE**. Là một công cụ thiết kế và phát triển bản đồ của Blizzard Entertainment tạo ra dành cho Warcraft III: Reign of Chaos và bản mở rộng Warcraft III: Frozen Throne.
**Cỏ biển** là những loài thực vật có hoa mọc trong môi trường nước mặn và thuộc một trong bốn họ là họ Cỏ biển (Posidoniaceae), họ Rong lá lớn (Zosteraceae), họ Thủy thảo (Hydrocharitaceae)
**Babel** là một trình biên dịch Javascript mã nguồn mở và miễn phí có chức năng chính dùng để biên dịch ECMAScript thành phiên bản tương thích ngược cho JavaScript có thể chạy trên các
Trong lập trình, **tham số** là biến được thu nhận bởi một chương trình con. Tại thời gian chạy, chương trình con sử dụng các giá trị được gán cho các tham số để thay
**Trận chung kết giải vô địch bóng đá châu Âu 2020** là một trận đấu bóng đá được diễn ra vào ngày 11 tháng 7 năm 2021 trên sân vận động Wembley ở Luân Đôn,
**Trận chung kết Giải vô địch bóng đá U-23 ASEAN 2025** là trận đấu quyết định ngôi vô địch của Giải vô địch bóng đá U-23 ASEAN 2025, giải đấu lần thứ năm do Liên
Trong lập trình hướng đối tượng dựa trên lớp, **hàm tạo** (tiếng Anh: _constructor_, viết tắt: _ctor_) trong một lớp là một kiểu chương trình con đặc biệt được dùng để tạo ra đối tượng.
Trong khoa học máy tính, **ngôn ngữ máy tính** là hệ thống giao tiếp với máy tính. Các ngôn ngữ như vậy được sử dụng để tạo **mã máy tính** hoặc **mã** **chương trình**, tập
"**Love Story**" là một bài hát của nữ ca sĩ kiêm nhạc sĩ sáng tác bài hát người Mỹ Taylor Swift, được hãng đĩa Big Machine Records phát hành làm đĩa đơn mở đường cho
**Dylan** là một ngôn ngữ lập trình đa mẫu hình có hỗ trợ hàm, lập trình hướng đối tượng (OOP), động và phục hồi trong khi cung cấp một mô hình lập trình được thiết
**_Liên Minh Huyền Thoại_: Giải vô địch thế giới mùa 2** () là Giải vô địch thế giới lần thứ hai của bộ môn thể thao điện tử _Liên Minh Huyền Thoại_, diễn ra vào
**Trận chung kết Giải vô địch bóng đá nữ thế giới 2015** là trận đấu bóng đá nữ được tổ chức vào ngày 5 tháng 7 năm 2015 trên sân BC Place, ở Vancouver, Canada,
**Chung kết Giải vô địch bóng rổ thế giới 2023** là trận đấu nhằm xác định ra nhà vô địch của Giải vô địch bóng rổ thế giới 2023 giữa Đức và Serbia. Trận đấu
**Gecko** là một bộ máy trình bày được phát triển bởi Mozilla. Nó được sử dụng trong trình duyệt Firefox, email client Thunderbird và nhiều dự án khác Gecko được thiết kế để hỗ trợ
**Oberon** là một ngôn ngữ lập trình đa năng được xuất bản lần đầu tiên vào năm 1987 bởi Niklaus Wirth và là thành viên mới nhất của gia đình Wirth gồm các ngôn ngữ
**Elixir** (phát âm là _Ê-líx-xơ_) là một ngôn ngữ lập trình hàm, đồng thời và đa năng, được chạy trên máy ảo BEAM, thứ còn được sử dụng để thực hiện ngôn ngữ lập trình
**_Kinh Dịch_** (chữ Nôm: 經易), tên gốc là **_Dịch Kinh_** (chữ Hán: 易經), là một sách bói toán cổ xưa của Trung Quốc, nằm trong hàng ngũ những kinh điển cổ xưa nhất của nền
phải|nhỏ|402x402px|[[Mã nguồn của một chương trình máy tính đơn giản được viết bằng ngôn ngữ lập trình C. Khi được biên dịch và chạy, nó sẽ cho kết quả "Hello, world!".]] **Ngôn ngữ lập trình**
**C** là một ngôn ngữ mệnh lệnh được phát triển từ đầu thập niên 1970 bởi Dennis Ritchie để dùng trong hệ điều hành UNIX. Từ đó, ngôn ngữ này đã lan rộng ra nhiều
nhỏ|Cbmain Trong khoa học máy tính, một **ngôn ngữ lập trình bậc cao** (tiếng Anh: _high-level programming language_) là một ngôn ngữ lập trình có sự trừu tượng hóa mạnh mẽ khỏi các chi tiết
**Java** (phiên âm Tiếng Việt: "_Gia-va_") là một ngôn ngữ lập trình hướng đối tượng, dựa trên lớp được thiết kế để có càng ít phụ thuộc thực thi càng tốt. Nó là ngôn ngữ
**Phương thức lẩn tránh miễn dịch của mầm bệnh** là các phương thức mà mầm bệnh sử dụng để chống lại cơ chế hoạt động của hệ miễn dịch. Nếu như động vật có xương
thumb|Hình ảnh [[kính hiển vi điện tử quét của một bạch cầu trung tính hay đại thực bào (màu vàng/phải) đang nuốt vi khuẩn bệnh than (màu cam/trái).]] **Hệ miễn dịch** là hệ thống bảo
**Chiến dịch Šiauliai** hay **Chiến dịch Shyaulyay** diễn ra từ ngày 5 tháng 7 đến ngày 29 tháng 8 năm 1944 là một trong các hoạt động quân sự lớn của Hồng quân Liên Xô
nhỏ|Những nghiên cứu phủ nhận quá trình ấm lên toàn cầu do con người gây nên được kiểm duyệt bởi hội đồng chuyên gia là gần như không tồn tại trong khoảng 2013-14. Hơn 99.99%
**Chiến dịch Pedestal** (, **Trận chiến giữa tháng Tám**), được người dân Malta gọi là **** (, **Đoàn vận tải Santa Maria**), là một chiến dịch tiếp vận đảo Malta của Hải quân Hoàng gia
**Mục đích luận trong sinh học** (_Teleology in biology_) là việc diễn giải có chủ ý đặt thuyết mục đích luận (Teleology) hướng đến mục tiêu trong những giải thích về sự thích nghi của
**Chiến dịch Gratitude**, hay còn được gọi là **Cuộc không kích** **ở** **Biển Đông,** là một chiến dịch không kích được tiến hành bởi Đệ Tam Hạm đội của Hải quân Hoa Kỳ trên Mặt
Ngôn ngữ lập trình C có một hệ thống mở rộng cho việc **khai báo các biến của các kiểu khác nhau**. Những quy tắc dành cho các kiểu phức tạp có thể gây nhầm
**Chiến dịch Overlord**, hay **Cuộc tập trận Hornpipe**, là mật danh của **Trận Normandie,** một chiến dịch quân sự quy mô lớn của quân đội Đồng Minh tại miền Bắc nước Pháp trong Chiến tranh
**Trịnh Tùng** (chữ Hán: 鄭松, 19 tháng 12 năm 1550 – 17 tháng 7 năm 1623), thụy hiệu **Thành Tổ Triết Vương** (成祖哲王), là vị chúa chính thức đầu tiên của dòng họ Trịnh dưới
**Chiến dịch Linebacker II**, hay còn được biết đến là **Chiến dịch Điện Biên Phủ trên không**, là chiến dịch quân sự cuối cùng của Hoa Kỳ chống lại Việt Nam Dân chủ Cộng hoà
**Trịnh Căn** (chữ Hán: 鄭根, 18 tháng 7 năm 1633 Lúc nhỏ, Trịnh Căn chưa được xem là một ứng cử viên cho việc kế thừa ngôi Chúa, bởi bác cả của ông là Sùng
**Trịnh Cương** (chữ Hán: 鄭棡, 9 tháng 7 năm 1686 – 20 tháng 12 năm 1729), còn có tên khác là **Trịnh Chù**, thụy hiệu là **Hy Tổ Nhân vương** (禧祖仁王), là vị chúa Trịnh
**Trịnh Doanh** (chữ Hán: 鄭楹, 4 tháng 12 năm 1720 – 12 tháng 5 năm 1767), thụy hiệu **Nghị Tổ Ân vương** (毅祖恩王), là vị chúa Trịnh thứ 7 thời Lê Trung hưng trong lịch
**Chiến dịch Budapest** (Tiếng Nga:_Будапештская операция_) là trận đánh lớn nhất giữa quân đội Liên Xô với quân đội Đức Quốc xã và quân đội Hungary tại _Mặt trận Hungary_ thuộc Chiến tranh Xô-Đức trong
**Chiến dịch tấn công hữu ngạn Dniepr** ở Ukraina (1944), hay còn được gọi là **Chiến dịch tấn công Dniepr–Carpath**, kéo dài từ ngày 24 tháng 12 năm 1943 đến ngày 14 tháng 4 năm