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


67

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

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

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

  • LL(k)?LR(k)
  • i=1LL(k)?i=1LR(k)
  • i=1LL(k)=?LL()
  • LL()?i=1LR(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)LLLL()
  • SLL(1)=LL(1),SLL(k)LL(k),SLL(k+1)×LL(k)

SLL(k+1)×LL(k)LL()LLLLRLLLL()

สำหรับ 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(k1)
  • LLLR
  • LL()×LR

ระดับภาษา

สำหรับ LL

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

LL(k)LL()LLLLRLLLL()

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

  • LLLR(1){aibj|ij}
  • LL()×LR{aibj|ij}
  • 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.