Vì bạn muốn sử dụng một số loại mã giả hoặc bảng/cấu trúc dữ liệu nội bộ. Ví dụ, nếu bạn có một số dòng mã:
a = b + c;
Bạn sẽ muốn đi đó và phá vỡ nó thành một
load b
load c
add b + c
store a
làm ví dụ, nhiều giải pháp. Ngôn ngữ nội bộ có lẽ tốt hơn là đi thẳng đến hội đồng cho một mục tiêu cụ thể vì một vài lý do. Ngôn ngữ nội bộ là hy vọng một cái gì đó có thể được tối ưu hóa nếu bạn có một trình tối ưu hóa, và là chung chung, đủ để được sử dụng trên nhiều mục tiêu nếu bạn có một mong muốn nhắm mục tiêu bộ vi xử lý khác nhau.
Tôi không biết đủ về nó nhưng tôi nghĩ bạn cũng có các trình phân tích cú pháp được sử dụng phổ biến bison/flex, đun sôi bạn thành một số mã trung gian/tập lệnh và sau đó bạn viết một phụ trợ cho điều đó.
Bạn cũng được hưởng lợi, ví dụ bạn có thể có C và C++ và giao diện người dùng ngôn ngữ khác mà không ảnh hưởng đến chương trình phụ trợ.
Bạn cũng được lợi từ việc bẻ khóa trình biên dịch thành các khối mô-đun logic, bạn có thể phát triển và kiểm tra giao diện người dùng độc lập từ đầu sau. Ví dụ: llvm, cho phép xuất và nhập ngôn ngữ trung gian, bạn có thể thực sự muốn viết mã bằng ngôn ngữ trung gian và có lợi ích của nhiều mục tiêu trên chương trình phụ trợ.
Nguồn
2012-03-19 05:40:20
Bạn có thể vui lòng cho tôi biết trình biên dịch M + N như thế nào? Tôi nghĩ rằng chúng tôi có M kết thúc trước để chuyển đổi sang máy phát mã ICG và N để chuyển đổi sang mã máy mục tiêu. Bạn có đang xem xét từng giao diện người dùng và phần cuối của trình biên dịch không? – Zephyr
@ Zephyr, Nếu không có sự kết hợp FE/BE, chúng tôi sẽ cần nhiều hoán vị không cần thiết/khó sử dụng. –
@Zephyr Có, một kết thúc trước/kết thúc kết thúc trở lại là một trình biên dịch. Chắc chắn điều này là hiển nhiên? – EJP