วิธีแสดงไวยากรณ์ไม่ชัดเจน?

สารบัญ:

วิธีแสดงไวยากรณ์ไม่ชัดเจน?
วิธีแสดงไวยากรณ์ไม่ชัดเจน?
Anonim

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

คุณจะรู้ได้อย่างไรว่าไวยากรณ์ไม่ชัดเจน

ไวยากรณ์จะคลุมเครือหากมี มีอยู่มากกว่าหนึ่งที่มาทางซ้ายสุด หรือมากกว่าหนึ่งที่มาทางขวาสุดหรือมากกว่าหนึ่งต้นไม้แยกวิเคราะห์สำหรับสตริงอินพุตที่กำหนด ถ้าไวยากรณ์ไม่คลุมเครือ เรียกว่าไม่คลุมเครือ หากไวยากรณ์มีความกำกวม ก็ไม่ดีสำหรับการสร้างคอมไพเลอร์

ตัวอย่างไวยากรณ์ที่คลุมเครือคืออะไร

ในวิทยาการคอมพิวเตอร์ ไวยากรณ์ที่คลุมเครือคือ ไวยากรณ์ที่ปราศจากบริบทซึ่งมีสตริงที่สามารถมีรากศัพท์หรือแยกวิเคราะห์ทางซ้ายสุดได้มากกว่าหนึ่งต้น ในขณะที่ไวยากรณ์ที่ไม่ชัดเจน เป็นไวยากรณ์ที่ปราศจากบริบทซึ่งทุกสตริงที่ถูกต้องมีที่มาซ้ายสุดหรือแยกวิเคราะห์ต้นไม้

คุณจะพิสูจน์ได้อย่างไรว่าไวยากรณ์ที่ไม่มีบริบทไม่ชัดเจน

3 คำตอบ

  1. CFG ทั้งหมดที่ไม่มีสัญลักษณ์ที่ไร้ประโยชน์และการเรียกซ้ำทางซ้ายและขวาสำหรับสัญลักษณ์เดียวกันนั้นคลุมเครือ โดยทั่วไป: …
  2. ในการตรวจสอบความกำกวม คุณต้องค้นหา 2 อนุพันธ์ซ้ายสุดสำหรับสตริงเดียวกัน (หรือ 2 ที่มาขวาสุด หรือ 2 ต้นไม้ที่มา)

คุณแก้ไวยากรณ์ที่คลุมเครืออย่างไร

วิธีการลบความคลุมเครือ-

  1. โดยการแก้ไขไวยากรณ์
  2. โดยการเพิ่มกฎการจัดกลุ่ม
  3. โดยใช้ความหมายและเลือกคำที่มีความหมายที่สุด
  4. โดยการเพิ่มกฎการจัดลำดับความสำคัญหรือกฎการแยกวิเคราะห์ที่มีความละเอียดอ่อนตามบริบทอื่นๆ