IELR (1) -parser คืออะไร


14

ฉันพยายามสอนตัวเองเกี่ยวกับการใช้วัวกระทิง manpage bison (1) พูดเกี่ยวกับ bison:

สร้าง LR deterministic LR หรือตัวแยกวิเคราะห์ LR (GLR) ทั่วไปที่ใช้ LALR (1), IELR (1), หรือ canonical LR (1) ตารางตัวแยกวิเคราะห์

ตัวแยกวิเคราะห์ IELR คืออะไร บทความที่เกี่ยวข้องทั้งหมดที่ฉันค้นพบในเว็บไซต์ทั่วโลกนั้นได้รับการชำระเงินแล้ว



@reinierpost ฉันรู้สึกงี่เง่ามากในตอนนี้ ทำไมฉันไม่พบสิ่งนี้
FUZxxl

ฉันไม่รู้ - Google ปรับเปลี่ยนผลการค้นหาในแบบของคุณ ...
เริ่มใหม่

@reierierpost คุณต้องการตอบคำถามนี้โดยอ้างลิงก์ของคุณเพื่อล้างคำถามนี้หรือไม่
Merbs

อืม ... ถ้านั่นคือทั้งหมดที่ทำได้ก็โอเค
reinierpost

คำตอบ:


3

IELR (1) การแยกอัลกอริทึม

อัลกอริทึม (1) การแยก IELR ได้รับการพัฒนาในปี 2008 โดยโจเอลอีเดนนี่เป็นส่วนหนึ่งของปริญญาเอกของเขา การวิจัยภายใต้การดูแลของ Brian A. Malloy ที่ Clemson University IELR (1) ขั้นตอนวิธีการเป็นรูปแบบของสิ่งที่เรียกว่า"น้อยที่สุด" LR (1) ขั้นตอนวิธีการพัฒนาโดยเดวิดเพจเจอร์ในปี 1977ที่ตัวเองเป็นรูปแบบของการLR (k) ขั้นตอนวิธีการแยกการประดิษฐ์คิดค้นโดยโดนัลด์นูในปี 1965 IE ใน IELR (1) หมายถึงการกำจัดความไม่เพียงพอ (ดูหัวข้อสุดท้าย)

อัลกอริธึม LR (1)

ส่วนLR (1)ของ IELR (1) หมายถึงL eft ไปทางขวา, R ightmost มาด้วยโทเค็น 1 lookahead ตัวแยกวิเคราะห์ LR (1) จะเรียกว่าตัวแยกวิเคราะห์แบบบัญญัติ อัลกอริธึมการแยกวิเคราะห์ระดับนี้ใช้กลยุทธ์การแยกวิเคราะห์จากล่างขึ้นบนลดกะด้วยสแต็กและตารางการเปลี่ยนสถานะระบุการดำเนินการต่อไปที่จะทำในระหว่างการแยกวิเคราะห์

ในอดีต LR (1) อัลกอริทึมได้รับผลกระทบจากข้อกำหนดหน่วยความจำขนาดใหญ่สำหรับตารางการเปลี่ยนแปลง การปรับปรุงของเพจเจอร์คือการพัฒนาวิธีการรวมสถานะการเปลี่ยนแปลงเมื่อมีการสร้างตารางการเปลี่ยนแปลงซึ่งจะช่วยลดขนาดของตารางได้อย่างมาก ดังนั้นอัลกอริทึมของเพจเจอร์ทำให้ตัวแยกวิเคราะห์ LR (1) แข่งขันกับกลยุทธ์การแยกวิเคราะห์อื่น ๆ ที่เกี่ยวข้องกับประสิทธิภาพของพื้นที่และเวลา วลี "ตัวแยกวิเคราะห์ LR ขั้นต่ำ (1)" หมายถึงขนาดที่เล็กที่สุดของตารางการเปลี่ยนแปลงที่แนะนำโดยอัลกอริทึมของเพจเจอร์

ข้อ จำกัด ของอัลกอริทึมของเพจเจอร์

อัลกอริธึม LR น้อยที่สุด (1) สร้างตารางการเปลี่ยนแปลงขึ้นอยู่กับไวยากรณ์อินพุตเฉพาะสำหรับภาษาที่จะแยกวิเคราะห์ ไวยากรณ์ต่าง ๆ สามารถสร้างภาษาเดียวกันได้ แท้จริงแล้วมันเป็นไปได้สำหรับไวยากรณ์ที่ไม่ใช่ LR (1) ในการสร้างภาษา LR (1) ที่แยกวิเคราะห์ได้ ในทางปฏิบัติ LR (1) ตัวแยกวิเคราะห์ LR ยอมรับไวยากรณ์ที่ไม่ใช่ LR (1) พร้อมข้อกำหนดสำหรับการแก้ไขข้อขัดแย้งระหว่างการเปลี่ยนสถานะที่เป็นไปได้สองสถานะ ("การเปลี่ยนแปลงลดความขัดแย้ง") เพื่อรองรับข้อเท็จจริงนี้ Denny และ Malloy พบว่าอัลกอริทึมของเพจเจอร์ล้มเหลวในการสร้างตัวแยกวิเคราะห์ที่ทรงพลังพอที่จะแยกวิเคราะห์ LR (1) ภาษาเมื่อให้ไวยากรณ์ที่ไม่ใช่ LR (1) บางไวยากรณ์แม้ว่าไวยากรณ์ที่ไม่ใช่ LR (1) จะสร้างภาษา LR (1)

Denny และ Malloy แสดงให้เห็นว่าข้อ จำกัด นี้ไม่ได้เป็นเพียงแค่การศึกษาโดยแสดงให้เห็นว่า Gawk และ Gpic ทั้งซอฟต์แวร์ที่ใช้กันอย่างแพร่หลายและเป็นผู้ใหญ่ใช้ในการแยกวิเคราะห์ที่ไม่ถูกต้อง

การปรับปรุงของ IELR (1)

Denny และลอยศึกษาแหล่งที่มาของข้อบกพร่องของอัลกอริทึมเพจเจอร์ของโดยการเปรียบเทียบตารางการเปลี่ยนแปลงที่เกิดจากอัลกอริทึมเพจเจอร์ของตารางการเปลี่ยนแปลงของเทียบเท่า LR (1) ไวยากรณ์และการระบุแหล่งที่มาของสองสิ่งที่พวกเขาระยะบกพร่องที่ปรากฏในตารางการเปลี่ยนแปลงจากเพจเจอร์ของ อัลกอริทึม แต่ไม่อยู่ในตารางการเปลี่ยน LR (1) อัลกอริทึมIELR ของ Denny และ Malloy (1) ( Inadequacy Elimination LR (1)) เป็นอัลกอริทึมที่ออกแบบมาเพื่อกำจัดความไม่เพียงพอเหล่านี้เมื่อสร้างตารางการเปลี่ยนแปลงที่มีขนาดเท่ากันกับอัลกอริธึมของเพจเจอร์


6

บทความที่อ้างว่าจะแนะนำ: IELR (1): ตาราง LR (1) Parser สำหรับ Non-LR (1) Grammars ที่มีการแก้ไขข้อขัดแย้ง (ผ่าน archive.org)โดย Joel E. Denny และ Brian A. Malloy, มหาวิทยาลัยเคลมสัน สามารถใช้ได้อย่างอิสระจากเว็บไซต์ของ Malloy

สิ่งที่พวกเขามีค่าคือสิ่งที่ฉันไม่สามารถตอบได้ (โดยส่วนตัวแล้วฉันไม่เข้าใจความจำเป็นในการแยก CFG ที่พิการเช่นนี้ - ทำไม จำกัด พลังการแสดงออกของคุณเมื่อคุณสามารถใช้GLR ได้สิ่งที่เหมาะสมสำหรับฉันคือTAGหรือPEG (ดูเป็นธรรมชาติและเพิ่มพลังการแสดงออก) หรือต้นไม้ ไวยากรณ์ (สำหรับภาษาต่าง ๆ เช่น XML ซึ่งการแยกวิเคราะห์ต้นไม้ไม่ได้รับการออกแบบโดยไม่มีเหตุมีผล)


ในขณะที่ฉันเห็นด้วยกับหลักการเกี่ยวกับเทคโนโลยีปัญหาก็คือการแยกแบบกำหนดขึ้นแบบดั้งเดิมมีการใช้งานที่ดีกว่าและสมบูรณ์กว่า อีกปัญหาคือการแยก CF ทั่วไปมีประสิทธิภาพมากขึ้น แต่ GLR อาจไม่ใช่รุ่นที่ดีที่สุด
Babou

4
เหตุผลหลักที่ทำให้คนพัฒนา CFG hobbled parsers คือตัวแยกวิเคราะห์ GLR ไม่จำเป็นต้องทำงานในเวลาเชิงเส้นนี่เป็นปัญหาใหญ่สำหรับการใช้งานหลายอย่าง ตัวแยกวิเคราะห์ IELR สามารถรับประกันรันไทม์เชิงเส้นและอื่น ๆ
FUZxxl

ฉันไม่เข้าใจว่าทำไมมันจะมีปัญหา
reinierpost

2
O(n4)O(n3)ล.ผมม.xO(nx). มนุษย์ไม่ได้มีชีวิตอยู่ตลอดไปและมีเรื่องให้ทำมากมาย การเสียเวลาโดยทั่วไปนั้นไม่ดี
ผู้ใช้

3
ฉันต้องการทราบว่า"โดยส่วนตัวแล้วฉันไม่เข้าใจความจำเป็นในการแยก CFG ที่พิการเช่นนี้ - ทำไม จำกัด พลังการแสดงออกของคุณเมื่อคุณสามารถใช้ GLR ได้" ค่อนข้างเข้าใจผิดในบริบทนี้ IELR (1) ถูกนำมาใช้ในการสร้าง LR มีประสิทธิภาพมากขึ้น (1) ตาราง parser, ซึ่งจะช่วยให้มีประสิทธิภาพมากขึ้น parsers
orlp
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.