คำถามติดแท็ก parsers

คำถามเกี่ยวกับอัลกอริทึมที่ตัดสินว่าสตริงที่กำหนดเป็นของภาษาทางการแบบตายตัวหรือไม่

1
Earley Parser สามารถสร้างเป็น parser fuzzy คล้ายกับ Levenshtein Automata Algo สำหรับ DFA ได้หรือไม่?
มีวิธีการแยกวิเคราะห์แบบคลุมเครือ (ยอมรับสตริงแม้มีความผิดพลาดในการแก้ไขระยะทางที่แน่นอน) ด้วย DFA และ Levenshtein Automata ที่สร้างขึ้นในเวลาทำงานของคำที่ป้อนเข้า สิ่งที่คล้ายกันสามารถทำได้ด้วยการแยกวิเคราะห์ Earley? ฉันพบว่ามันยากที่จะเข้าใจอัลกอริทึมให้ตอบคำถามนี้โดยลำพัง

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

3
ตัวแยกวิเคราะห์แบบสืบเชื้อสายซ้ำพร้อมการย้อนรอยสำหรับไวยากรณ์
คนที่สามารถสอนให้ฉันทำไม parser โคตร recursive กับ backtracking ที่พยายามที่โปรดักชั่นและ (ตามลำดับ) ไม่รู้จักภาษาเกิดขึ้นจากไวยากรณ์AAS→ a SaS→aSaS \rightarrow aSaS→S→aaS \rightarrow aaS→ a Sa | S→aSa | aaS \rightarrow aSa\ |\ aa มันจะปรากฏคำเฉพาะแยกจากภาษา\}{ a2n | n≥1} {a2n | n≥1}\{a^{2^n}\ |\ n \ge 1 \} ฉันสร้างตัวแยกวิเคราะห์ดังกล่าวโดยใช้ตัวแยกวิเคราะห์ ABNF นี้กับกฎการผลิตS = "a" S "a" / "aa"และตัวแยกวิเคราะห์ไม่รู้จักคำaaaaaaเช่น ฉันคาดหวังว่ามันจะใช้การผลิตจนกระทั่งการต่อเชื่อมของโหนดเทอร์มินัลของการแยกจากซ้ายเริ่มต้นด้วย 7 ของจากนั้นขึ้นไปที่การแยกเลือกการผลิตแทนจนกระทั่งต้นไม้ดูเหมือน นี้:S→ …

2
มีปัญหาที่แตกต่างกันของ "ห้อยต่องแต่งอย่างอื่น" นอกเหนือจาก "จับคู่ที่ใกล้ที่สุด" หรือไม่?
นำเสนอไวยากรณ์ต่อไปนี้บริบทฟรี "ห้อยอื่น" ประเภทความกำกวม (คิดว่าย่อมาและย่อมาและยืนสำหรับบางชนิดอื่น ๆ ของการเรียนการสอนหรือบล็อก): ตัวอย่างเช่นสามารถแยกวิเคราะห์เป็นหรือเป็น (นี่เป็นคำที่ไม่ชัดเจน / สั้นที่สุดสำหรับไวยากรณ์นี้)aaaif expr thenขbbelseคccS→ a SขS|S|คS→aSbS|aS|c \begin{aligned} S &\rightarrow aSbS \;|\; aS \;|\; c\\ \end{aligned} คขคaacbcaacbc( a ( a c b c ) )(a(acbc))(a(acbc))( a ( a c ) b c )(a(ac)bc)(a(ac)bc) วิธี "มาตรฐาน" เพื่อแก้ไขความกำกวม "ห้อย" อื่น ๆ นี้บังคับให้คำสั่ง "else" ( ) …

1
ฉันจะสร้างป่าของต้นไม้ไวยากรณ์จากเวกเตอร์ Earley ได้อย่างไร
การใช้เวกเตอร์ Earley เป็นตัวจำแนกค่อนข้างตรงไปตรงมา: เมื่อถึงจุดสิ้นสุดของสตริงคุณเพียงแค่ต้องตรวจสอบการผลิตซึ่งเป็นจริงเสร็จสมบูรณ์เริ่มต้นที่ตำแหน่ง 0 หากคุณมีอย่างน้อยหนึ่งแล้วสตริงได้รับการยอมรับ การใช้เวกเตอร์ Earley เพื่อสร้างต้นไม้การแยกไม่ชัดเจน ที่จริงแล้วฉันไม่สามารถทราบได้ว่าขั้นตอนวิธีอัลกอริทึมจะทำงานอย่างไรนอกจากการอ้างอิงเท่านั้นที่ฉันพบว่าไม่ชัดเจนหรือเป็นเทคนิคขั้นสูง มีใครช่วยให้แสงออกมาบ้าง?

2
เครื่องทัวริงสองสถานะสำหรับการจับคู่วงเล็บ
ในวิทยาลัยเราได้เรียนรู้เกี่ยวกับทฤษฎีการคำนวณโดยทั่วไปและเครื่องทัวริงโดยเฉพาะ ผลลัพธ์ทางทฤษฎีที่ยอดเยี่ยมอย่างหนึ่งคือค่าใช้จ่ายของตัวอักษรขนาดใหญ่ (สัญลักษณ์) คุณสามารถลดจำนวนสถานะลงเหลือเพียง 2 ฉันกำลังมองหาตัวอย่างของเครื่องจักรทัวริงที่แตกต่างกันและตัวอย่างที่นำเสนอโดยทั่วไปคือเครื่องมือจับคู่วงเล็บ / ตัวตรวจสอบ โดยพื้นฐานแล้วมันจะตรวจสอบว่าสตริงของวงเล็บเช่น(()()()))()()()สมดุลหรือไม่ (ตัวอย่างก่อนหน้านี้จะคืนค่า 0 สำหรับการไม่สมดุล) ลองเป็นฉันฉันจะได้รับสิ่งนี้เป็นเครื่องสามรัฐ ฉันชอบที่จะรู้ว่าถ้าใครสามารถลดสิ่งนี้ลงให้เหลือน้อยที่สุดในทางทฤษฎีของ 2 และสิ่งที่วิธี / รัฐ / สัญลักษณ์ของพวกเขาเป็นอย่างไร เพียงเพื่อชี้แจงวงเล็บคือ "แซนวิช" ระหว่างเทปเปล่าดังนั้นในตัวอย่างข้างต้น - - - - - - - (()()()))()()() - - - - - - -จะเป็นอินพุตบนเทป ตัวอักษรจะรวมถึง(, ), 1, 0, -และ*halt*รัฐไม่นับเป็นของรัฐ สำหรับการอ้างอิงสามสถานะของฉันมีดังนี้: คำอธิบายของรัฐ: State s1: Looks for Closing …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.