การเปรียบเทียบทางทฤษฎีภาษาของ LL และไวยากรณ์กรัม


67

ผู้คนมักบอกว่าตัวแยกวิเคราะห์LR (k)นั้นมีพลังมากกว่าตัวแยกวิเคราะห์LL (k) ข้อความเหล่านี้ส่วนใหญ่คลุมเครือ โดยเฉพาะอย่างยิ่งเราควรเปรียบเทียบคลาสสำหรับคงที่หรือสหภาพกับkทั้งหมดหรือไม่ ดังนั้นสถานการณ์เป็นอย่างไร โดยเฉพาะอย่างยิ่งฉันสนใจที่ LL (*) จะเข้ากันได้อย่างไรkk

เท่าที่ฉันรู้ชุดของตัวแยกไวยากรณ์ LL และ LR ที่เกี่ยวข้องนั้นเป็น orthogonal ดังนั้นให้เราพูดถึงภาษาที่สร้างขึ้นโดยชุดของไวยากรณ์ที่เกี่ยวข้อง ให้แสดงถึงระดับของภาษาที่สร้างขึ้นโดยไวยากรณ์ที่สามารถแยกวิเคราะห์โดยตัวแยกวิเคราะห์L R ( k )และคล้ายกับคลาสอื่น ๆLR(k)LR(k)

ฉันสนใจในความสัมพันธ์ต่อไปนี้:

  • LL(k)⊆?LR(k)
  • ⋃i=1∞LL(k)⊆?⋃i=1∞LR(k)
  • ⋃i=1∞LL(k)=?LL(∗)
  • LL(∗)∘?⋃i=1∞LR(k)

สิ่งเหล่านี้อาจจะง่าย เป้าหมายของฉันคือการรวบรวมการเปรียบเทียบ "สมบูรณ์" การอ้างอิงได้รับการชื่นชม


2
บางทีนี่อาจช่วยคุณได้! ภาพลำดับชั้นไวยากรณ์
— Andrea Tucci

1
@AndreaTucci: ใช่ แต่ครอบคลุมไวยากรณ์เท่านั้นไม่ใช่ภาษาที่สร้างขึ้น
— Raphael

คำตอบ:


60

⊆⊂×

LL=⋃kLL(k)LR=⋃kLR(k)

ระดับไวยากรณ์

สำหรับ LL

  • LL(0)⊂LL(1)⊂LL(2)⊂LL(2)⊂⋯⊂LL(k)⊂⋯⊂LL⊂LL(∗)
  • SLL(1)=LL(1),SLL(k)⊂LL(k),SLL(k+1)×LL(k)

SLL(k+1)×LL(k)LL(∗)LL⊂LLRLL⊂LL(∗)

สำหรับ 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

นี่คือแบบฝึกหัดง่ายๆ

LL เทียบกับ LR

  • LL(k)⊂LR(k)
  • LL(k)×SLR(k),LALR(k),LR(k−1)
  • LL⊂LR
  • LL(∗)×LR

ระดับภาษา

สำหรับ LL

  • LL(0)⊂LL(1)⊂LL(2)⊂⋯⊂LL(k)⊂⋯⊂LL⊂LL(∗)
  • SLL(k)=LL(k)

LL(k)⊂LL(∗)LL⊂LLRLL⊂LL(∗)

สำหรับ LR

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

บางส่วนของสิ่งเหล่านี้ได้รับการพิสูจน์โดย Knuth ในบทความของเขาเรื่องการแปลภาษาจากซ้ายไปขวาซึ่งเขาได้แนะนำ LR (k) ส่วนที่เหลือได้รับการพิสูจน์ในการแปลง LR (k) Grammars เป็น LR (1), SLR (1) และ (1,1) ไวยากรณ์บริบทที่ถูกผูกมัดโดย Mickunas et al.

LL เทียบกับ LR

  • LL⊂LR(1){aibj|i≥j}
  • LL(∗)×LR{aibj|i≥j}
  • LR(1)=DCFL

คำตอบที่ดีแม้ว่าฉันได้ลงคะแนนแล้ว ฉันจะคิดว่า Frank deRemer พิสูจน์ LALR <= LR ในกระดาษ LALR ต้นฉบับของเขาหรือไม่ (1969?)
— 207421

LALR(k)⊆LR(k)LALRLR

1
@AlextenBrink ฉันได้อ่านบทความและได้รับการสอนโดย Frank de Remer แต่เมื่อ 30 กว่าปีก่อน ;-) ขอบคุณสำหรับรายละเอียดทั้งหมด
— user207421

มันอาจเป็นการดีที่จะรวบรวมตัวอย่างไวยากรณ์สำหรับความไม่เท่าเทียมกันในแต่ละครั้ง
— o11c

1
@ o11c ฉันคิดว่านั่นเป็นคำตอบเดียว ความประทับใจของฉันคืออเล็กซ์ให้การอ้างอิงที่ดีในกรณีที่จำเป็น เขากล่าวว่า "ออกกำลังกายง่าย" สำหรับบางคน ฉันเดาว่าผู้อ่านไม่สามารถใช้ไวยากรณ์ได้พวกเขาสามารถโพสต์คำถามใหม่เพื่อถามเฉพาะกรณีนั้น
— กราฟิลส์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.