nếu tôi có một ngữ pháp có một sản phẩm chứa cả đệ quy trái và bao thanh toán như
cái nào được ưu tiên, đệ quy trái hay bao thanh toán?
nếu tôi có một ngữ pháp có một sản phẩm chứa cả đệ quy trái và bao thanh toán như
cái nào được ưu tiên, đệ quy trái hay bao thanh toán?
Câu trả lời:
Các biến đổi như bao thanh toán bên trái hoặc loại bỏ đệ quy trái không có các quy tắc ưu tiên. Rõ ràng, các ngữ pháp kết quả có thể khác nhau nhưng chúng sẽ nhận ra cùng một ngôn ngữ.
Ngữ pháp ví dụ của câu hỏi khó hơn bài toán về bài tập về nhà điển hình. Vì vậy, hiển thị công việc của chúng tôi sẽ hữu ích.
Hãy xác định một phép biến đổi loại bỏ đệ quy trái.
Được
,
chúng tôi loại bỏ đệ quy trái như thế này:
Tính tổng quát ở trên thường không được đưa ra trong các văn bản trình biên dịch, nhưng các văn bản phân tích cú pháp như Grune & Jacobs thực hiện điều này. Bao thanh toán còn lại có thể được áp dụng cho ngữ pháp được chuyển đổi ở trên nhưng sẽ chỉ đưa ra các quy tắc bổ sung sẽ không thay đổi câu trả lời. Vì vậy, chúng tôi sẽ đơn giản hóa việc trình bày mà không cần thực hiện thêm bao thanh toán.
Trong câu trả lời này, chúng tôi sẽ không đề cập đến các vấn đề đệ quy trái gián tiếp vì chúng tôi chỉ quan tâm đến các quy tắc của một thiết bị đầu cuối duy nhất. Lưu ý rằng đệ quy trái gián tiếp có thể được xử lý, mặc dù. (Mở một câu hỏi riêng nếu điều đó quan trọng.)
Loại bỏ bao thanh toán bên trái là trong hầu hết các văn bản trình biên dịch giới thiệu được thực hiện như thế này. Được
năng suất bao thanh toán còn lại:
Bây giờ điều đó thực hiện các biến đổi trong cả hai thứ tự.
Hãy để lại yếu tố ngữ pháp của câu hỏi
và sau đó loại bỏ đệ quy bên trái:
Và đối với thứ tự khác, chúng ta hãy loại bỏ đệ quy trái khỏi ngữ pháp của câu hỏi
và sau đó để lại yếu tố đầu cuối :
Aha, ngữ pháp kết quả là như nhau!
Nói chung, việc chứng minh rằng hai ngữ pháp là tương đương là không thể giải quyết được. Vì vậy, nếu một loạt các biến đổi ngữ pháp có thể ảnh hưởng đến ngôn ngữ được công nhận sau đó, nó sẽ là thảm họa.