Ngôn ngữ so sánh lý thuyết của ngữ pháp LL và LR


67

Mọi người thường nói rằng trình phân tích cú pháp LR (k) mạnh hơn trình phân tích cú pháp LL (k) . Những tuyên bố này là mơ hồ hầu hết thời gian; cụ thể, chúng ta nên so sánh các lớp cho một cố định hoặc liên minh trên tất cả ? Vậy tình hình thực sự như thế nào? Cụ thể, tôi quan tâm đến cách LL (*) phù hợp.kk

Theo như tôi biết, các bộ ngữ pháp LL và LR tương ứng chấp nhận là trực giao, vì vậy chúng ta hãy nói về các ngôn ngữ được tạo bởi các bộ ngữ pháp tương ứng. Đặt biểu thị lớp ngôn ngữ được tạo bởi các ngữ pháp có thể được phân tích cú pháp bởi trình phân tích cú pháp và tương tự cho các lớp khác.LR(k)LR(k)

Tôi quan tâm đến các mối quan hệ sau đây:

  • LL(k)?LR(k)
  • i=1LL(k)?i=1LR(k)
  • i=1LL(k)=?LL()
  • LL()?i=1LR(k)

Một số trong số này có thể dễ dàng; Mục tiêu của tôi là thu thập một so sánh "hoàn thành". Tài liệu tham khảo được đánh giá cao.


2
Có lẽ điều này có thể giúp bạn! Hình ảnh phân cấp ngữ pháp
Andrea Tucci

1
@AndreaTucci: Có, nhưng điều đó chỉ bao gồm các ngữ pháp, không bao gồm các ngôn ngữ được tạo.
Raphael

Câu trả lời:


60

Có rất nhiều ngăn chặn được biết đến. Hãy biểu thị ngăn chặn và ngăn chặn thích hợp. Đặt × biểu thị sự không tương thích.×

Đặt , L R = k L R ( k ) .LL=kLL(k)LR=kLR(k)

Trình độ ngữ pháp

Đối với LL

  • LL(0)LL(1)LL(2)LL(2)LL(k)LLLL()
  • SLL(1)=LL(1),SLL(k)LL(k),SLL(k+1)×LL(k)

Hầu hết trong số này được chứng minh trong Thuộc tính của các ngữ pháp từ trên xuống theo định nghĩa của Rosenkrantz và Stearns. là một bài tập khá tầm thường. Bài trình bày này bởi Terence Parr đặt L L ( * ) trên slide 13. Các giấy LL thường xuyên văn phạm tiếng bởi Jarzabek và Krawczyk chương L L L L R , và bằng chứng của họ trivially kéo dài đến L L L L ( * )SLL(k+1)×LL(k)LL()LLLLRLLLL()

Đối với LR

  • LR(0)SLR(1)LALR(1)LR(1)
  • SLR(k)LALR(k)LR(k)
  • SLR(1)SLR(2)SLR(k)
  • LALR(1)LALR(2)LALR(k)
  • LR(0)LR(1)LR(2)LR(k)LR

Đây đều là những bài tập đơn giản.

LL so với LR

  • (Tính chất của xác định từ trên xuống văn phạm tiếngcộng với bất kỳ trái recursive ngữ pháp)LL(k)LR(k)
  • (bài tập đơn giản)LL(k)×SLR(k),LALR(k),LR(k1)
  • (bất kỳ ngữ pháp đệ quy trái)LLLR
  • LL()×LR

Trình độ ngôn ngữ

Đối với LL

  • LL(0)LL(1)LL(2)LL(k)LLLL()
  • SLL(k)=LL(k)

LL(k)LL()LLLLRLLLL()

Đối với LR

  • LR(0)SLR(1)=LALR(1)=LR(1)=SLR(k)=LALR(k)=LR(k)=LR

Một số trong số này đã được Knuth chứng minh trong bài viết của mình về Dịch thuật ngôn ngữ từ trái sang phải, trong đó ông đã giới thiệu LR (k), phần còn lại được chứng minh trong Chuyển đổi ngữ pháp LR (k) sang LR (1), SLR (1), và (1,1) Các ngữ pháp ngữ cảnh bên phải của Mickunas et al.

LL so với LR

  • LLLR(1){aibj|ij}
  • LL()×LR{aibj|ij}
  • LR(1)=DCFL

Câu trả lời tuyệt vời, tôi đã nâng cao. Tôi có thể nghĩ Frank deRemer đã chứng minh LALR <= LR trong bài báo LALR ban đầu của mình không? (1969?)
dùng207421

LALR(k)LR(k)LALRLR

1
@AlextenBrink Tôi đã đọc bài báo và được Frank de Remer dạy, nhưng nó đã hơn 30 năm trước ;-) Cảm ơn tất cả các chi tiết.
dùng207421

Có thể tốt để thu thập các ngữ pháp ví dụ cho mỗi bất đẳng thức.
o11c

1
@ o11c Tôi nghĩ rằng sẽ quá tải một câu trả lời. Ấn tượng của tôi là Alex đã đưa ra các tài liệu tham khảo tốt khi cần thiết; ông nói "tập thể dục dễ dàng" cho một số. Tôi đoán nếu một người đọc không thể đưa ra một ngữ pháp, họ có thể đăng một câu hỏi mới yêu cầu trường hợp cụ thể đó.
Raphael
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.