"หากไวยากรณ์สร้างต้นไม้แยกวิเคราะห์อย่างน้อย 2 ต้นหรืออนุพันธ์ แสดงว่าไวยากรณ์กำกวม" กฎอีกข้อ: CFG ทั้งหมด (ไม่มีสัญลักษณ์ไร้ประโยชน์) ที่มีการเรียกซ้ำทางซ้ายและการเรียกซ้ำทางขวาสำหรับ non-terminal เดียวกันนั้นก็คลุมเครือเช่นกัน
คุณจะรู้ได้อย่างไรว่าไวยากรณ์ไม่ชัดเจน
ไวยากรณ์จะคลุมเครือหากมี มีอยู่มากกว่าหนึ่งที่มาทางซ้ายสุด หรือมากกว่าหนึ่งที่มาทางขวาสุดหรือมากกว่าหนึ่งต้นไม้แยกวิเคราะห์สำหรับสตริงอินพุตที่กำหนด ถ้าไวยากรณ์ไม่คลุมเครือ เรียกว่าไม่คลุมเครือ หากไวยากรณ์มีความกำกวม ก็ไม่ดีสำหรับการสร้างคอมไพเลอร์
ตัวอย่างไวยากรณ์ที่คลุมเครือคืออะไร
ในวิทยาการคอมพิวเตอร์ ไวยากรณ์ที่คลุมเครือคือ ไวยากรณ์ที่ปราศจากบริบทซึ่งมีสตริงที่สามารถมีรากศัพท์หรือแยกวิเคราะห์ทางซ้ายสุดได้มากกว่าหนึ่งต้น ในขณะที่ไวยากรณ์ที่ไม่ชัดเจน เป็นไวยากรณ์ที่ปราศจากบริบทซึ่งทุกสตริงที่ถูกต้องมีที่มาซ้ายสุดหรือแยกวิเคราะห์ต้นไม้
คุณจะพิสูจน์ได้อย่างไรว่าไวยากรณ์ที่ไม่มีบริบทไม่ชัดเจน
3 คำตอบ
- CFG ทั้งหมดที่ไม่มีสัญลักษณ์ที่ไร้ประโยชน์และการเรียกซ้ำทางซ้ายและขวาสำหรับสัญลักษณ์เดียวกันนั้นคลุมเครือ โดยทั่วไป: …
- ในการตรวจสอบความกำกวม คุณต้องค้นหา 2 อนุพันธ์ซ้ายสุดสำหรับสตริงเดียวกัน (หรือ 2 ที่มาขวาสุด หรือ 2 ต้นไม้ที่มา)
คุณแก้ไวยากรณ์ที่คลุมเครืออย่างไร
วิธีการลบความคลุมเครือ-
- โดยการแก้ไขไวยากรณ์
- โดยการเพิ่มกฎการจัดกลุ่ม
- โดยใช้ความหมายและเลือกคำที่มีความหมายที่สุด
- โดยการเพิ่มกฎการจัดลำดับความสำคัญหรือกฎการแยกวิเคราะห์ที่มีความละเอียดอ่อนตามบริบทอื่นๆ