ฉันเพิ่งเจอกระดาษอธิบายเทคนิคการแยกวิเคราะห์ที่กล่าวถึงในชื่อ น่าเสียดายที่คำศัพท์ที่ใช้ในกระดาษดังกล่าวค่อนข้างเกินความเข้าใจของฉันดังนั้นฉันจึงพยายามที่จะเข้าใจอัลกอริทึมการก่อสร้างมากขึ้นอย่างสังหรณ์ใจ ฉันเชื่อว่าฉันประสบความสำเร็จ ( การนำเสนอนี้เป็นที่มาของช่วงเวลา ah-ha) แต่การตรวจสอบความถูกต้องจากคนที่คุ้นเคยกับเทคนิคหรือคำศัพท์ที่อยู่ในนั้นจะได้รับการชื่นชมอย่างมาก
ฉันจะอธิบายวิธีการแก้ปัญหาของฉัน (ถ้ามันถูกต้องฉันเชื่อว่ามันจะช่วยคนอื่นที่พยายามทำความเข้าใจกับเทคนิค) และถามคำถามเพิ่มเติมในภายหลัง เพื่อให้แน่ใจว่าไม่มีความเข้าใจผิดฉันจะใช้สัญลักษณ์มาตรฐานต่อไปนี้: , , ,และในกระดาษเพื่อแสดงถึงกฎ จำนวนฉันอย่างไรก็ตามฉันอาจใช้ชื่อที่แตกต่างกันสำหรับแนวคิดมากกว่ากระดาษต้นฉบับ, B , C , . . ∈ N . . X , Y , Z ∈ N ∪ T α , β , γ , . . ∈ { N ∪ T } * ฉัน →การโอห์มฉัน
นอกจากนี้ตลอดทั้งคำอธิบายที่เท่าเทียมกันความสัมพันธ์ถูกนำมาใช้
การก่อสร้าง
มีไอเท็มสองชนิดที่อยู่ภายในการแจงอัตโนมัติ: รายการ LR แบบง่าย (0) ของรูปแบบซึ่งฉันเรียกรายการกะ และรายการในรูปแบบซึ่งผมเรียกรายการแก้ไข ; เหล่านี้บอก parser ที่จะผลักดันสัญลักษณ์สำรองสตรีมใส่แล้วลดจากจำนวนกฎเมื่อสัญลักษณ์แรกของ\m β
ไวยากรณ์ถูกเติมด้วยกฎและการก่อสร้างเริ่มต้นด้วยรายการการเปลี่ยนแปลงในสถานะเริ่มต้นS ′ 0 → ∙ S $
ตอนนี้เพื่อสร้างหุ่นยนต์ตัดสินใจระหว่างทางเลือกเหล่านี้สำหรับแต่ละรายการในสถานะ :
หากรายการมีการเปลี่ยนแปลงรายการจะมีการเปลี่ยนแปลงในหุ่นยนต์ที่ เป็นสัญลักษณ์แรกของ\Q X → Q ' X β
หากรายการนั้นเป็นรายการเลื่อนให้เพิ่มรายการแก้ไขสำหรับแต่ละกฎ\B J →การอัลฟ่า∙ β , ผม, 0 B J →การอัลฟ่าβ
หากรายการเป็นรายการแก้ไขให้เป็นสัญลักษณ์แรกของ\ถ้า , เพิ่มรายการกะสำหรับแต่ละกฎ\ หากรายการอื่นนอกเหนือจากมีเป็นจุด lookahead ของพวกเขาเพิ่มช่วงการเปลี่ยนภาพไปยังหุ่นยนต์ ทุกรายการที่แก้ไขในจะส่งผลให้รายการแก้ไขในX β X ∈ N X เจ → ∙ โอห์มX เจ →โอห์มฉัน →อัลฟ่า∙ β , ม. , n X Q X → Q ' C ฉัน →อัลฟ่า∙ X β , ม. , n q C i → α X ∙ β , มq ′Q'
หากรายการนั้นเป็นรายการที่แก้ไขจะไม่สนับสนุนข้อมูล lookahead ใด ๆ และสามารถละทิ้งได้ แต่ก่อนอื่นให้เพิ่มรายการแก้ไขสำหรับกฎแต่ละ \B J →การอัลฟ่า∙ บีตา, ม. , n
แน่นอนนี่เป็นเพียงภาพร่าง ที่จริงแล้วการปิดสถานะจะต้องคำนวณก่อนและจากนั้นเราจะสามารถจัดการกับการเปลี่ยน / การเปลี่ยนแปลงและการแก้ปัญหาได้
การเปลี่ยนออโตมาตาเป็นตารางแยกวิเคราะห์การเปลี่ยนแปลงเป็นเรื่องเล็กน้อยหลังจากนั้น เพียงในรูปแบบย่อยผู้เขียนบทความตีความความละเอียดเป็นการยอมรับการกระทำ จากผลของออโตเมติกที่ได้รับฉันพบว่ามันง่ายกว่าที่จะปฏิบัติกับการเปลี่ยนแปลงเป็นการยอมรับ
คำถาม
อย่างแรกคือชัดเจนว่ากระบวนการที่อธิบายไว้ข้างต้นถูกต้องหรือไม่
ประการที่สองคือความสัมพันธ์ที่เท่าเทียมกัน ฉันเดาได้แค่ว่าความสัมพันธ์ของความเท่าเทียมเป็นสิ่งที่รับผิดชอบในการตัดสินใจว่าจะนำไอเท็มแก้ปัญหาใดมาใช้เมื่อเห็นรายการกะเสร็จแล้ว ดูเหมือนจะส่งผลให้เกิด lookahead อย่างยอดเยี่ยมคล้ายกับชุดตัวแยกวิเคราะห์ LSLR ของ FOLLOW_กระดาษอธิบาย "ความสัมพันธ์ที่เท่าเทียมกันอย่างละเอียด" ในหน้า 11; มีวิธีในการตีความความสัมพันธ์นี้ในแง่ที่ใช้งานง่าย? มีความสัมพันธ์อื่น ๆ ที่รู้จักกัน?κ 0 F O L L O W L M
และสุดท้ายคือการแก้ไขความขัดแย้ง กระดาษอธิบายได้ดีว่าอะไรไม่เพียงพอในระบบเปลี่ยนเกียร์ มีวิธีการแก้ไขข้อบกพร่องเหล่านี้คล้ายกับวิธีการแก้ไขข้อขัดแย้งใน parser LR แบบดั้งเดิมหรือไม่? บางอย่างเช่นการแก้ปัญหาความขัดแย้งสไตล์yaccผ่านความสำคัญและการเชื่อมโยงได้ถูกนำมาใช้ในเครื่องกำเนิดไฟฟ้า ShRe parser หรือไม่?
ขอบคุณถ้าคุณอ่านทั้งหมดนี้และคำตอบใด ๆ จะได้รับการชื่นชมอย่างมาก :)