Đệ quy trái và bao thanh toán trái - cái nào đi trước?


8

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ư

FFBmột|cDS|c

cái nào được ưu tiên, đệ quy trái hay bao thanh toán?


1
Bạn đang sử dụng chiến lược phân tích cú pháp nào? Đối với gốc đệ quy, phải tránh đệ quy trái bằng mọi giá. Bao thanh toán còn lại rất quan trọng nếu bạn đang thực hiện phân tích LL chẳng hạn.
Ken Li

2
Xin lỗi, tôi đã quên viết nó. Tôi đang sử dụng chiến lược trình phân tích cú pháp từ trên xuống (LL (1))
Andrea Tucci

Theo inst.eecs.ber siêu.edu nó giống nhau! (trên bài tập thứ 3)
Andrea Tucci

Câu trả lời:


12

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.

Đệ quy trái

Hãy xác định một phép biến đổi loại bỏ đệ quy trái.

Được

MộtMộtα0|Mộtα1||Mộtαn|Bβ0|Bβ1||Bβn ,

chúng tôi loại bỏ đệ quy trái như thế này:

MộthBβ0|Bβ1||BβnMộttα0|α1||αnMộtt+MộttMộtt+|MộttMộtMộthMộtt+|Mộth

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.)

Bao thanh toán

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

Mộtxy|xz

năng suất bao thanh toán còn lại:

MộtSy|zMộtxMộtS

Bây giờ điều đó thực hiện các biến đổi trong cả hai thứ tự.

Bao thanh toán trước

Hãy để lại yếu tố ngữ pháp của câu hỏi

FSDS|εFFBmột|cFS

và sau đó loại bỏ đệ quy bên trái:

FhcFSFtBmộtFt+FtFt+|FtFSDS|εFFhFt+|Fh

Xóa đệ quy trái trước

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

FhcDS|cFtBmộtFt+FtFt+|FtFFhFt+|Fh

và sau đó để lại yếu tố đầu cuối :c

FhSDS|εFhcFhSFtBmộtFt+FtFt+|FtFFhFt+|Fh

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.


Cảm ơn bạn, giải thích rất tốt! Vì vậy, nếu tôi có cả đệ quy trái và bao thanh toán trái, tôi có thể chọn cái nào loại bỏ trước. Cảm ơn một lần nữa
Andrea Tucci

"Nói chung, việc chứng minh rằng hai ngữ pháp tương đương là không thể giải quyết được." - bạn có nghĩa là, chứng minh điều này là không thể, hoặc bạn có nghĩa là không có thuật toán nào luôn luôn như vậy? Chỉ có điều sau là đúng. Ngoài ra, sẽ không "thảm họa" nếu chỉ một đơn hàng sẽ giữ ngôn ngữ không thay đổi: sau đó bạn sẽ phải sử dụng đúng thứ tự. Nhưng rõ ràng là nếu cả hai phép biến đổi được sử dụng độc lập với ngôn ngữ khác thì chúng không thể ảnh hưởng đến ngôn ngữ được tạo.
Raphael

Lưu ý rằng chúng tôi có các công cụ định dạng khá tinh vi tại đây (Markdown và LaTeX) để cải thiện sự rõ ràng. Tôi chỉnh sửa bài viết của bạn cho phù hợp, xin vui lòng xem.
Raphael

1
@Raphael Ngôn ngữ "chứng minh" là mơ hồ và từ ngữ "thảm họa" tôi đoán là cường điệu. Nắm bắt tốt.
codeah

@Raphael Cảm ơn bạn đã đề cập đến cú pháp.
codeah
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.