ฉันมีปัญหากับแบบฝึกหัดนี้:
ให้ G เป็นไวยากรณ์ที่ไม่ชัดเจนต่อไปนี้สำหรับ calcul-แคลคูลัส:
E → v | λv.E | EE | (E)
โดยที่ E คือสัญลักษณ์ที่ไม่ใช่ขั้วเดี่ยวλv.Eแสดงถึงนามธรรม abtraction wrt ตัวแปร v ใน E และ EE แทนแอ็พพลิเคชัน
- กำหนดไวยากรณ์LL (1) G ′เช่น L (G′) = L (G) และความคลุมเครือของ G ได้รับการแก้ไขโดยกำหนดอนุสัญญาตามปกติดังต่อไปนี้:
- สิ่งที่เป็นนามธรรมคือการเชื่อมโยงที่ถูกต้อง
- แอปพลิเคชันนั้นเชื่อมโยงกันอยู่
- แอปพลิเคชันมีลำดับความสำคัญสูงกว่านามธรรม
- แสดง LL (1) การแยกโต๊ะ G
λv1. λv2. v1v2v1
และต้นไม้แยกที่ได้รับเมื่อแยกสตริง
ฉันตัดความกำกวมของการตั้งค่าความสำคัญและการเชื่อมโยงเพื่อให้ได้ไวยากรณ์นี้:
E -> EF | F
F -> λv.G | G
G -> (E) | v
ซึ่งไม่ใช่ LL (1) เนื่องจากการผลิตE -> EF
ซ้ำ อย่างไรก็ตามการกำจัดการเรียกซ้ำซ้ายจากการผลิตที่ฉันได้รับ:
E -> FE¹
E¹-> FE¹ | ɛ
F -> λv.G | G
G -> (E) | v
ที่ไม่เป็นไปตามข้อกำหนด 1.2
ฉันค้นหาวิธีแก้ไขปัญหาบนอินเทอร์เน็ต แต่ดูเหมือนว่ามันเป็นไปไม่ได้ที่จะกำจัดการวนซ้ำทางซ้ายที่สงวนการเชื่อมโยงซ้าย
อย่างไรก็ตามแบบฝึกหัดนี้ปรากฏในการสอบของคอมไพเลอร์เมื่อหลายปีก่อนดังนั้นจะต้องมีคำตอบที่ถูกต้อง
ขอขอบคุณสำหรับความช่วยเหลือของคุณ.