วลีเปลี่ยนแปลงเป็นส่วนขยายมาตรฐาน (E) BNF บริบทฟรีไวยากรณ์คำจำกัดความ: วลีเปลี่ยนแปลงมีnโปรดักชั่น (หรือเท่ากัน nonterminals) 1ผ่านn ที่ตำแหน่งของวลีการเปลี่ยนรูปเราต้องการเห็นทุกการผลิตเหล่านี้เพียงครั้งเดียว แต่เราไม่สนใจที่จะจัดลำดับของผู้ไม่ประสงค์ออกนามเหล่านี้
ตัวอย่างเช่น:
S <- X { A, B, C } Y
เทียบเท่ากับ:
S <- X A B C Y
S <- X A C B Y
S <- X B A C Y
S <- X B C A Y
S <- X C A B Y
S <- X C B A Y
แนวคิดที่ดูเหมือนว่าจะถูกนำมาใช้ใน"ขยายไวยากรณ์บริบทฟรีกับวลีที่เปลี่ยนแปลง" ในนั้นมันยังอธิบายถึงวิธีการแยกวลีเหล่านี้ในเวลาเชิงเส้นโดยใช้ตัวแยกวิเคราะห์ LL (1)
กระดาษ"การแยกวิเคราะห์วลีการเปลี่ยนแปลง"อธิบายวิธีการแยกวลีการเปลี่ยนแปลงโดยใช้ตัวแยกวิเคราะห์ parser นี่เป็นเพียงเอกสารสองฉบับที่ฉันได้พบว่าพูดถึงวลีเกี่ยวกับการเปลี่ยนแปลงและวิธีการแยกวิเคราะห์
เมื่อเห็นว่าเราสามารถแยกวิเคราะห์วลีเรียงสับเปลี่ยนเหล่านี้ได้อย่างง่ายดายด้วยตัวแยกวิเคราะห์แบบ LL (1) ฉันเดาว่าฉันจะทำแบบเดียวกันกับตัวแยกวิเคราะห์สไตล์ LR (1) คำถามของฉันคือ:
ไวยากรณ์ที่มีวลีการเรียงสับเปลี่ยนสามารถแยกวิเคราะห์เป็นเส้นตรงเวลาในขนาดสตริงอินพุตโดยใช้เครื่องจักร LR (1) ในขณะที่รักษาตารางที่มีขนาดเหมาะสมได้หรือไม่?
วลีการเปลี่ยนแปลงไม่ได้เพิ่มพลังของภาษาที่ไม่มีบริบท: ในตัวอย่างของฉันข้างต้นเราสามารถระบุการเรียงสับเปลี่ยนที่เป็นไปได้ทั้งหมด แต่ไวยากรณ์แล้วระเบิดเป็นไวยากรณ์ส่งผลให้สามารถมีขนาด ) วิธีนี้ช่วยให้สามารถวิเคราะห์เวลาแบบเส้นตรงได้ แต่ขนาดของไวยากรณ์จะใหญ่เกินไป
แม้ว่าสิ่งนี้จะดีกว่า แต่แน่นอนว่าไม่ดีพอ - การใช้วลีที่มีการเปลี่ยนแปลง 30 รายการจะทำให้ไวยากรณ์ใช้ไม่ได้ ยังมีอีกส่วนหนึ่งของการวิเคราะห์คำ LR ที่เรายังไม่ได้แตะและนั่นคือขั้นตอนการประมวลผลตามจริงที่ใช้สำหรับการแยกวิเคราะห์ ฉันจินตนาการว่าการจัดเก็บตัวนับบนสแต็กอาจสามารถแก้ปัญหาได้ แต่ฉันไม่แน่ใจว่าจะทำอย่างไร
ขณะนี้ฉันกำลังใช้ตัวแยกวิเคราะห์และในวลีการเปลี่ยนแปลงโดเมนปัญหาจะเป็นของขวัญจากสวรรค์ ในขณะที่ฉันใช้เครื่องจักร LR (1) คำถามข้างต้นก็ตามมา