Mô tả vấn đề trừu tượng
Theo cách tôi nhìn thấy, unparsing có nghĩa là tạo ra một luồng mã thông báo từ AST, khi được phân tích lại sẽ tạo ra một AST bằng nhau, tức là parse(unparse(AST)) = AST
nên giữ.
Điều này tương đương với việc tìm một cây phân tích hợp lệ sẽ tạo ra cùng một AST.
Ngôn ngữ được mô tả bằng ngữ pháp do S tự do ngữ cảnh sử dụng biến thể eBNF.
Vì vậy, unparser phải tìm một 'đường dẫn' hợp lệ thông qua các nút được duyệt qua trong đó tất cả các ràng buộc ngữ pháp. Điều này về cơ bản có nghĩa là tìm sự phân bổ hợp lệ các nút AST cho các quy tắc sản xuất ngữ pháp. Đây là một vấn đề thỏa mãn ràng buộc (CSP) nói chung và có thể được giải quyết, như phân tích cú pháp, bằng cách quay lại trong.
May mắn cho phân tích cú pháp, điều này có thể được thực hiện trong sử dụng GLR (hoặc tốt hơn là hạn chế ngữ pháp). Vì cấu trúc AST rất gần với cấu trúc quy tắc sản xuất ngữ pháp, tôi thực sự ngạc nhiên khi thấy một triển khai trong đó thời gian chạy tệ hơn phân tích cú pháp: Xtext sử dụng ANTLR để phân tích cú pháp và quay lui để bỏ mã.
Câu hỏi
- Là một ngữ pháp thuộc tính S miễn phí ngữ cảnh tất cả mọi thứ mà một trình phân tích cú pháp và trình duyệt không cần chia sẻ hoặc có các ràng buộc nào nữa, ví dụ về việc thực hiện phân tích cú pháp / trình phân tích cú pháp?
- Tôi có cảm giác vấn đề này không phải là nói chung - một số thiên tài có thể giúp tôi với điều này?
Tôi đã không nhận được câu trả lời cho câu hỏi này trên StackOverflow . Nó được đề nghị để hỏi ở đây, nhưng tôi ghét sự dư thừa, vì vậy tôi hy vọng bạn tha thứ cho tôi vì đã yêu cầu bạn trả lời ở đây .