คำตอบคือใช่ อย่างไรก็ตามฉันจะไม่ทำเช่นนั้นกับตัวแยกวิเคราะห์ Earley เพราะมีตัวที่ง่ายกว่าที่มีความสามารถเหมือนกัน
โดยพื้นฐานแล้วตัวแยกวิเคราะห์ Earley เป็นของครอบครัวของตัวแยกวิเคราะห์บริบทที่ไม่มีบริบททั่วไปซึ่งสร้างการแยกวิเคราะห์ที่เป็นไปได้ทั้งหมดสำหรับสตริงที่กำหนดเมื่อไวยากรณ์ไม่ชัดเจน
มีอย่างน้อยสองวิธีในการทำความเข้าใจตัวแยกวิเคราะห์เหล่านี้:
เมื่อแยกสตริงเดี่ยวออโตเมติกสถานะ จำกัด ที่ต้องพิจารณาคือออโตเมติกเชิงเส้นที่รับรู้เฉพาะสตริง
ที่จะแยกวิเคราะห์หนึ่งสัญลักษณ์ในแต่ละครั้ง (จำนวนสถานะคือ| w | + 1 ) หากคุณใช้การสร้างข้ามผลิตภัณฑ์ของ FAและ CF Garmmar
(Bar Hillel, Perlis, Shamir 1961) คุณจะได้รับไวยากรณ์ CF ใหม่ที่เป็นไวยากรณ์ใหม่ซึ่งสร้าง(G) จุดที่น่าสนใจที่มักจะมองข้ามคือเก็บรักษาต้นไม้แยกวิเคราะห์ที่ใช้โดยจนถึงการเปลี่ยนชื่อที่ไม่ใช่ขั้ว (เนื่องจากผลิตภัณฑ์ข้าม)W| w | + 1AGFL (A)∩ L (G )FG
ดังนั้นหาก FAสร้างเฉพาะสตริงอินพุตของคุณไวยากรณ์
จะสร้างสตริงนั้นเท่านั้น (หากอยู่ในมิฉะนั้นจะสร้างภาษาว่างเปล่า ) นอกจากนี้มันยังสร้างมันขึ้นมาด้วยการแยกวิเคราะห์ทั้งหมดที่สามารถใช้เพื่อสร้างมันได้AFL (G )∅G
ไวยากรณ์นี้คือสิ่งที่เรียกว่าป่าแบ่งที่ใช้ร่วมกันและอัลกอริธึมการแจงทั่วไป CF ทั้งหมดเป็นรุ่นที่ปรับให้เหมาะสมมากขึ้นหรือน้อยลงของการสร้างผลิตภัณฑ์ข้ามไม่ว่าจะเป็น CYK, Earley, LR ทั่วไปหรือ LL หรืออื่น ๆ ดังนั้นสิ่งที่ฉันพูดก็ใช้ได้กับพวกเขาด้วยF
แต่อย่างที่คุณเห็นนี่เป็นการสรุปการแยกชุดปกติทั้งหมดถ้าใครสนใจทำเช่นนั้น
WW
GF
หากต้องการสิ่งนี้สามารถใช้เพื่อเก็บเฉพาะสตริงที่มีระยะทางน้อยที่สุด
อย่างไรก็ตามสิ่งนี้สามารถปรับปรุงให้ดีขึ้นได้เล็กน้อยเนื่องจากการรวมเข้ากับเครื่องจักรสถานะ จำกัด นั้นเชื่อมโยงกัน
GWΣ* * * *
มันจะง่ายกว่าที่จะตัดสิ่งก่อสร้างนั้นเพื่อให้ได้ผลลัพธ์เหมือนเดิม แต่วิธีที่ดีที่สุดคือการสร้างทางแยกที่ควบคุมได้มากขึ้นเช่นองค์กรการเขียนโปรแกรมแบบไดนามิกที่ใช้โดย parsers ส่วนใหญ่ในวรรณคดีรวมถึง Earley's และใช้เพื่อหลีกเลี่ยงการสร้าง กฎไร้ประโยชน์โดยการคำนวณระยะทางและยกเลิกเส้นทางการคำนวณใด ๆ เมื่อเกินเกณฑ์ที่ต้องการ การเขียนโปรแกรมแบบไดนามิกยังสามารถใช้ในการคำนวณ parse-forest (หรือ parse-tree) โดยตรงสำหรับสตริงที่มีระยะทางสั้นที่สุดในการป้อนข้อมูล