Tôi đã nghiên cứu về các trình biên dịch. Lexer có vẻ rất thẳng về phía trước: Lấy một "câu" và chia nó thành các từ (hoặc các thẻ). Để đảm bảo ngữ pháp chính xác, một trình phân tích cú pháp là cần thiết. Trình phân tích cú pháp thường lấy các thẻ và xây dựng một cây dẫn đến nút gốc (các từ thành các câu, các đoạn văn, các trang, v.v ...).Khi nào nên sử dụng cây cú pháp trừu tượng hoặc cụ thể?
Từ this question có vẻ như một trình phân tích cú pháp sẽ tạo AST. AST chỉ chứa những gì cần thiết để thực thi mã, vì vậy những thứ như dấu ngoặc đơn sẽ không cần thiết vì ưu tiên toán tử được xây dựng thành một AST. Một AST có lẽ là tất cả các nhu cầu của trình biên dịch.
Nhưng điều gì về việc chuyển đổi mã từ ngôn ngữ này sang ngôn ngữ khác? Lấy một ngôn ngữ được tạo sẵn (ngữ pháp) hoặc một ngữ pháp hiện có và chuyển đổi nó thành ngữ pháp khác, nơi các quy tắc ưu tiên toán tử có thể hoặc không khác nhau? Ưu tiên của nhà điều hành có được "tích hợp sẵn" với CST không?
Ví dụ: giả sử tôi đã tạo ngôn ngữ và muốn dịch nó sang mã PHP. Toán tử bậc ba trên hầu hết các ngôn ngữ có liên kết từ phải sang trái. PHP không chính xác sử dụng kết hợp từ trái qua phải (see more about this here). Tôi muốn "ngôn ngữ của tôi" sử dụng từ phải sang trái nhưng mã PHP kết quả phải áp dụng dấu ngoặc đơn để có được kết quả chính xác trong PHP (với số link to Wikipedia, kết quả cần phải là "đào tạo" thay vì "ngựa").
Vì vậy, để dịch ngôn ngữ CST sẽ tốt hơn? Quyền ưu tiên của toán tử thường được xây dựng thành CST? Có điều gì ở giữa không? Có ví dụ nào so sánh cả hai cây với một phương trình đại số đơn giản? Bất kỳ ví dụ minh họa một toán tử bậc ba?
(Is "chuyển mã" thuật ngữ chính xác cho "dịch ngôn ngữ lập trình" Một tìm kiếm Google sẽ trả về chuyển đổi phương tiện truyền thông?.)
Những gì tôi đang cố gắng tìm ra là: Khi nào thì thích hợp hơn để sử dụng một khác?
Tôi không hiểu tại sao bạn cần cây cú pháp cụ thể cho bản dịch ngôn ngữ sang ngôn ngữ. Cú pháp cụ thể chính xác là những gì có khả năng khác biệt nhất. Bạn muốn tạo một chương trình với ngữ nghĩa * tương tự * bằng ngôn ngữ khác, cho rằng bạn chỉ cần * ngữ nghĩa * của chương trình gốc, và AST cung cấp cho bạn điều đó với ít lộn xộn hơn. – delnan
Ah, tôi hiểu ý của bạn là gì. Vì vậy, khi nào một cây bê tông sẽ được sử dụng và được coi là thích hợp hơn một cây trừu tượng, và có một cây chăm sóc cụ thể về ưu tiên? – Luke