Shift- แก้ไขการแยกวิเคราะห์ - คำถาม


10

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

ฉันจะอธิบายวิธีการแก้ปัญหาของฉัน (ถ้ามันถูกต้องฉันเชื่อว่ามันจะช่วยคนอื่นที่พยายามทำความเข้าใจกับเทคนิค) และถามคำถามเพิ่มเติมในภายหลัง เพื่อให้แน่ใจว่าไม่มีความเข้าใจผิดฉันจะใช้สัญลักษณ์มาตรฐานต่อไปนี้: , , ,และในกระดาษเพื่อแสดงถึงกฎ จำนวนฉันอย่างไรก็ตามฉันอาจใช้ชื่อที่แตกต่างกันสำหรับแนวคิดมากกว่ากระดาษต้นฉบับ, B , C , . . N . . X , Y , Z N T α , β , γ , . . { N T } * ฉัน →การโอห์มฉันa,b,c,...TA,B,C,...N...X,Y,ZNTα,β,γ,...{NT}Aiωi

นอกจากนี้ตลอดทั้งคำอธิบายที่เท่าเทียมกันความสัมพันธ์ถูกนำมาใช้κ0

การก่อสร้าง

มีไอเท็มสองชนิดที่อยู่ภายในการแจงอัตโนมัติ: รายการ LR แบบง่าย (0) ของรูปแบบซึ่งฉันเรียกรายการกะ และรายการในรูปแบบซึ่งผมเรียกรายการแก้ไข ; เหล่านี้บอก parser ที่จะผลักดันสัญลักษณ์สำรองสตรีมใส่แล้วลดจากจำนวนกฎเมื่อสัญลักษณ์แรกของ\AiαβAiαβ,m,nm βnmβ

ไวยากรณ์ถูกเติมด้วยกฎและการก่อสร้างเริ่มต้นด้วยรายการการเปลี่ยนแปลงในสถานะเริ่มต้นS 0S $S0S$S0S$

ตอนนี้เพื่อสร้างหุ่นยนต์ตัดสินใจระหว่างทางเลือกเหล่านี้สำหรับแต่ละรายการในสถานะ :q

  1. หากรายการมีการเปลี่ยนแปลงรายการจะมีการเปลี่ยนแปลงในหุ่นยนต์ที่ เป็นสัญลักษณ์แรกของ\Q X Q ' X βAiαβqXqXβ

  2. หากรายการนั้นเป็นรายการเลื่อนให้เพิ่มรายการแก้ไขสำหรับแต่ละกฎ\B J →การอัลฟ่าβ , ผม, 0 B J →การอัลฟ่าβAiωBjαAβ,i,0BjαAβ

  3. หากรายการเป็นรายการแก้ไขให้เป็นสัญลักษณ์แรกของ\ถ้า , เพิ่มรายการกะสำหรับแต่ละกฎ\ หากรายการอื่นนอกเหนือจากมีเป็นจุด lookahead ของพวกเขาเพิ่มช่วงการเปลี่ยนภาพไปยังหุ่นยนต์ ทุกรายการที่แก้ไขในจะส่งผลให้รายการแก้ไขในX β X N X เจโอห์มX เจโอห์มฉันอัลฟ่าβ , ม. , n X Q X Q ' C ฉันอัลฟ่าX β , ม. , n q C i α X β , Aiαβ,m,nXβXNXjωXjωAiαβ,m,nXqXqCiαXβ,m,nqq CiαXβ,m,n+1qQ'

  4. หากรายการนั้นเป็นรายการที่แก้ไขจะไม่สนับสนุนข้อมูล lookahead ใด ๆ และสามารถละทิ้งได้ แต่ก่อนอื่นให้เพิ่มรายการแก้ไขสำหรับกฎแต่ละ \B J →การอัลฟ่าบีตา, ม. , nAiω,m,nBjαAβ,m,nBjαAβ

แน่นอนนี่เป็นเพียงภาพร่าง ที่จริงแล้วการปิดสถานะจะต้องคำนวณก่อนและจากนั้นเราจะสามารถจัดการกับการเปลี่ยน / การเปลี่ยนแปลงและการแก้ปัญหาได้

การเปลี่ยนออโตมาตาเป็นตารางแยกวิเคราะห์การเปลี่ยนแปลงเป็นเรื่องเล็กน้อยหลังจากนั้น เพียงในรูปแบบย่อยผู้เขียนบทความตีความความละเอียดเป็นการยอมรับการกระทำ จากผลของออโตเมติกที่ได้รับฉันพบว่ามันง่ายกว่าที่จะปฏิบัติกับการเปลี่ยนแปลงเป็นการยอมรับr0,0$

คำถาม

อย่างแรกคือชัดเจนว่ากระบวนการที่อธิบายไว้ข้างต้นถูกต้องหรือไม่

ประการที่สองคือความสัมพันธ์ที่เท่าเทียมกัน ฉันเดาได้แค่ว่าความสัมพันธ์ของความเท่าเทียมเป็นสิ่งที่รับผิดชอบในการตัดสินใจว่าจะนำไอเท็มแก้ปัญหาใดมาใช้เมื่อเห็นรายการกะเสร็จแล้ว ดูเหมือนจะส่งผลให้เกิด lookahead อย่างยอดเยี่ยมคล้ายกับชุดตัวแยกวิเคราะห์ LSLR ของ FOLLOW_กระดาษอธิบาย "ความสัมพันธ์ที่เท่าเทียมกันอย่างละเอียด" ในหน้า 11; มีวิธีในการตีความความสัมพันธ์นี้ในแง่ที่ใช้งานง่าย? มีความสัมพันธ์อื่น ๆ ที่รู้จักกัน?κ 0 F O L L O W L Mκκ0FOLLOWLM

และสุดท้ายคือการแก้ไขความขัดแย้ง กระดาษอธิบายได้ดีว่าอะไรไม่เพียงพอในระบบเปลี่ยนเกียร์ มีวิธีการแก้ไขข้อบกพร่องเหล่านี้คล้ายกับวิธีการแก้ไขข้อขัดแย้งใน parser LR แบบดั้งเดิมหรือไม่? บางอย่างเช่นการแก้ปัญหาความขัดแย้งสไตล์yaccผ่านความสำคัญและการเชื่อมโยงได้ถูกนำมาใช้ในเครื่องกำเนิดไฟฟ้า ShRe parser หรือไม่?

ขอบคุณถ้าคุณอ่านทั้งหมดนี้และคำตอบใด ๆ จะได้รับการชื่นชมอย่างมาก :)


แนะนำให้โยกย้ายคำถามนี้ไปยังร้านค้า สำหรับกระดาษนั้นดูเหมือนว่าจะเป็นอัลกอริทึมที่ซับซ้อนมากซึ่ง "อาจจะ" (?) ไม่ได้ถูกนำไปใช้โดยใคร แนวคิดหลักดูเหมือนว่าจะรวม lookahead โดยพลการ แต่ยังรวมถึงการแยกเวลาเชิงเส้น ... ? แต่มีกี่แอปพลิเคชันที่จะตกลงได้ด้วยอัลกอริทึม superlinear ที่ง่ายกว่ามาตรฐานมากขึ้น? ความคิดใด ๆ แอปพลิเคชันใดที่ทำงานได้ดีกว่าด้วยวิธีนี้ คุณมีหนึ่งหรือรู้หนึ่ง
vzn

1
แบบฝึกหัดทางทฤษฎีที่ดีมาก (แม้ว่าฉันไม่ได้ดูด้านเทคนิค) เนื่องจากพลังเต็มรูปแบบของ LR (k) มักจะไม่ได้ใช้แม้แต่อย่างใดอย่างหนึ่งอาจสงสัยเกี่ยวกับผลกระทบในทางปฏิบัติ ฉันเห็นปัญหา 2 ประการของงานประเภทนี้: (1) เนื่องจากอัลกอริทึมซับซ้อนมากขึ้นมันเป็นไปได้หรือไม่ที่จิตใจของมนุษย์จะใช้ไวยากรณ์ไวยากรณ์และเข้าใจผลที่เกิดขึ้นเมื่อมันไม่ทำงาน มันเป็นความจริงบ่อยครั้งที่เทคนิคขั้นสูงนั้นให้ผลตอบแทนสูงเมื่อทำงาน แต่จะทำให้สิ่งต่าง ๆ แย่ลงเมื่อพวกเขาไม่ทำ (2) มันจะเป็นเส้นตรงในกรณีที่อัลกอริทึม CF ทั่วไปไม่ใช่เชิงเส้น
babou

คำตอบ:


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.