มีวิธีที่รู้จักกันในการสร้างไวยากรณ์ที่ได้รับชุด จำกัด ของสตริง จำกัด ?


10

จากการอ่านของฉันดูเหมือนว่าไวยากรณ์ส่วนใหญ่เกี่ยวข้องกับการสร้างสตริงจำนวนอนันต์ ถ้าคุณทำงานในทางตรงกันข้าม

หากให้ความยาว n สตริงของ m คุณควรสร้างไวยากรณ์ที่จะสร้างสตริงเหล่านั้นและเป็นเพียงสตริงเหล่านั้น

มีวิธีการที่เป็นที่รู้จักกันสำหรับการทำเช่นนี้หรือไม่? นึกคิดชื่อเทคนิคที่ฉันสามารถวิจัย อีกวิธีหนึ่งฉันจะดำเนินการค้นหาวรรณกรรมเพื่อค้นหาวิธีการดังกล่าวได้อย่างไร


5
เล็กน้อย: สร้างตาราง BNF ของสตริง
Joshua

เงื่อนไข จำกัด แน่นอน และคุณจะไม่ได้รับเซตที่ไม่มีที่สิ้นสุด "ได้รับ" เว้นแต่คุณจะมีคำอธิบายที่แน่นอนของมัน
vonbrand

คำตอบ:


11

สิ่งนี้อยู่ในหัวข้อทั่วไปของ "อุปนัยไวยากรณ์"; การค้นหาวลีนั้นจะทำให้เกิดวรรณคดีมากมาย ดูเช่นการกระตุ้นให้เกิดบริบทไวยากรณ์ฟรี , https://en.wikipedia.org/wiki/Grammar_induction , https://cstheory.stackexchange.com/q/27347/5038

สำหรับภาษาปกติ (แทนที่จะเป็นแบบที่ไม่มีบริบท) ดูที่regex golf NP-Complete หรือไม่ , เล็กที่สุด DFA ที่รับสายรับและปฏิเสธสายได้รับอื่น ๆ , มีการปรับปรุงขั้นตอนวิธีการดาน่าแองลุนสำหรับการเรียนรู้ชุดปกติและhttps://cstheory.stackexchange.com/q/1854/5038


การกระตุ้นไวยากรณ์สำหรับภาษาปกติที่ไม่มีที่สิ้นสุดนั้นค่อนข้างยากและแตกต่างจากปัญหานี้มาก
reinierpost

ฉันกำลังทำเครื่องหมายคำถามนี้ถูกต้องเพราะถึงแม้ว่ามันจะไม่ได้ตอบคำถามโดยตรง (ซึ่งกลายเป็นว่าแก้ได้เล็กน้อยตามที่ระบุไว้) แต่ก็ให้คำศัพท์ที่ฉันต้องทำวิจัยต่อไป
กุสตาฟ Bertram

8

ถ้าจำนวนของสายถูก จำกัด พูดตั้ง S={s1,s2....sm} คุณสามารถสร้างไวยากรณ์ฟรีตามบริบทที่สร้างสตริงเหล่านั้นขึ้นมาได้เสมอ A เป็นเทอร์มินัลไม่ใช่จากนั้นกฎสามารถ As1|s2|...sn. สำหรับชุดของสตริงที่ จำกัด คุณยังสามารถสร้างออโตมาตา จำกัด ที่ยอมรับเฉพาะสตริงเหล่านั้น ดังนั้นกรณีของชุด จำกัด ของสตริงจึงเป็นเรื่องเล็กน้อย


ฉันคิดว่าฉันต้องอ่านตำราการแยกวิเคราะห์ ในการหวนกลับคำตอบนี้ดูเหมือนชัดเจน ขอบคุณ!
กุสตาฟ Bertram

3

มีหลายวิธีดังนั้นคุณต้องกำหนดเกณฑ์เพิ่มเติมเกี่ยวกับคุณภาพของผลลัพธ์

  1. รายการ: สำหรับแต่ละสตริง w ในภาษามีกฎ Sw. ปล่อยSเป็น nonterminal เริ่มต้น เสร็จสิ้น
  2. ต้นไม้คำนำหน้า: สำหรับแต่ละคำนำหน้า w ของสตริงในภาษานั้น ๆ มี nonterminal Xw. สำหรับแต่ละสายw1xw2 ในภาษาที่ไหน x เป็นสัญลักษณ์มีกฎ Xw1xXw2. สำหรับแต่ละสายw ในภาษามีกฎ Xwϵ. ปล่อยXϵเป็น nonterminal เริ่มต้น เสร็จสิ้น
  3. ต้นไม้คำต่อท้าย: เดียวกันกลับ
  4. การใช้อัลกอริทึมรับประกันว่าจะสร้างไวยากรณ์ที่มีขนาดเล็กที่สุดเช่นกับกฎจำนวนน้อยที่สุด ฉันไม่รู้ว่ามันยากแค่ไหน

ใช่หลังจากคำตอบแรกเห็นได้ชัดว่าฉันควรกำหนดเกณฑ์เพิ่มเติม แต่รู้สึกไม่ยุติธรรมที่จะเปลี่ยนคำถามหลังจากคำตอบแรก
กุสตาฟ Bertram

ถึงกระนั้นฉันก็ชอบที่จะรู้ว่าความซับซ้อนของเวลาในการหาไวยากรณ์น้อยที่สุดสำหรับชุด จำกัด ที่กำหนด ... สมมติว่าในความยาวทั้งหมดของสตริงหรือในความยาวทั้งหมดของผล
reinierpost

3

สิ่งที่คุณถามคือคล้ายกับดัชนีการค้นหา ตัวแปลงสัญญาณรัฐ จำกัด แน่นอนสามารถสร้างและใช้เพื่อรับรู้ข้อความที่ป้อนให้พวกเขา สำหรับ exameple นั้น Lucene ใช้อัลกอริทึมนี้: http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.24.3698

สำหรับการใช้งานจริงให้ตรวจสอบการโพสต์บล็อกนี้โดยแอนดรู Gallant: ดัชนี 1,600,000,000 คีย์กับออโตและสนิม

ในโพสต์เขาอธิบายถึงวิธีการสร้าง FSA ที่ได้รับคลังข้อความเพื่อที่จะจดจำคำศัพท์ทั้งหมด ผลลัพธ์ที่ได้คือสร้าง FST ที่น้อยที่สุดโดยประมาณจากปุ่มที่เรียงลำดับล่วงหน้าในเวลาเชิงเส้นและในหน่วยความจำคงที่

คำนำหน้าการแบ่งปัน FSA และคำต่อท้าย

การใช้งานมีอยู่ในfstห้องสมุดของเขา: https://github.com/BurntSushi/fst


1

คำตอบสำหรับคำถามที่โพสต์โพสต์ใหม่ซึ่งตอบคำถามเดิม:

เราสร้างพจนานุกรมอัตโนมัติดังนี้:

  1. สร้างหุ่นยนต์ที่อ่านและยอมรับสตริงแรก
  2. สตริงถัดไปเริ่มต้นการอ่านมันด้วยหุ่นยนต์จนตัวอักษรบางอย่างไม่มีการเปลี่ยนแปลง เริ่มสาขาใหม่สำหรับส่วนที่เหลือของสตริง ทำซ้ำจนกว่าจะมีการประมวลผลสตริงทั้งหมด

ขนาดสูงสุดของหุ่นยนต์คือความยาวทั้งหมดของสตริงอินพุต สมมติว่าคุณสามารถจำลองการเปลี่ยนและสร้างใหม่ในเวลาคงที่เช่นกันรันไทม์คือความยาวทั้งหมดของสตริงการป้อนข้อมูล ไม่มีกรณีที่ดีที่สุดหรือเลวร้ายที่สุด

หุ่นยนต์นี้มีน้อย เนื่องจากในกรณีปกติออโตมาตะและไวยากรณ์สอดคล้องกันเกือบหนึ่งต่อหนึ่งเดียวกันเป็นจริงสำหรับไวยากรณ์แน่นอนว่ามันเป็นไปไม่ได้ที่จะสร้างสิ่งที่มีขนาด n ในเวลาน้อยกว่า n


ขอบคุณ เท่าที่ตอบคำถามนี้: ฉันไม่เห็นว่าสิ่งนี้มีส่วนช่วยอะไรมากกว่าเสารับสัญญาณ นอกจากนี้เราไม่ต้องการคำตอบที่ตอบสนองหรือแสดงความคิดเห็นกับคำตอบอื่น: นี่ไม่ใช่ฟอรัมการสนทนา วิธีการทำว่าจะโพสต์คำถามใหม่แล้วตอบด้วยตัวคุณเอง ฉันตระหนักดีว่าอาจจะไม่เห็นได้ชัด [ที่กล่าวว่าฉันไม่เห็นว่าคำตอบของคุณตอบปัญหา reinierpost อยากรู้อยากเห็นเกี่ยวกับ ปัญหาในตอนท้ายของคำตอบของ reinierpost คือการหาไวยากรณ์ที่มีจำนวนขั้นต่ำของกฎ แสดงให้เห็นว่าคำตอบของคุณวิธีการสร้าง DFA ที่มีจำนวนน้อยที่สุดของรัฐ (ต่อ)
DW

1
แน่นอนว่าเราสามารถแปลง DFA นั้นเป็นไวยากรณ์ปกติได้ แต่สิ่งที่ทำให้คุณคิดว่ามันจะน้อยที่สุดในแง่ของจำนวนกฎในไวยากรณ์? ดูเหมือนว่าจำเป็นต้องมีการพิสูจน์]
DW

สิ่งที่คำตอบของฉันมีส่วนช่วยคือไทม์ฉันคิดว่า คุณพูดถูกต้องหลายสิ่งหลายอย่างที่ฉันต้องการจะมีหลักฐาน แต่การติดต่อระหว่าง Finite Automata Transitions และกฎไวยากรณ์ปกตินั้นชัดเจนมากสำหรับฉัน (ถ้าอย่างหลังสามารถสร้างหนึ่งเทอร์มินัลต่อกฎตามคำจำกัดความส่วนใหญ่); จากนั้นไวยากรณ์ใด ๆ ที่เล็กกว่าของฉันจะให้ออโตเมติกที่เล็กกว่าอันที่เล็กที่สุด ดังนั้นฉันคิดว่าไวยกรณ์จากออโตเมติกขั้นต่ำ - ฉันจะเก็บคำแนะนำของคุณเกี่ยวกับคำตอบในใจขอบคุณ
Peter Leupold

ความคิดของ minimality สำหรับ DFA เป็นส่วนที่เกี่ยวกับจำนวนของรัฐ นี่หมายถึงการย่อเล็กสุดตามจำนวนช่วงการเปลี่ยนภาพใน DFA หรือการย่อเล็กสุดของจำนวนกฎในไวยากรณ์ที่ได้หรือไม่ ฉันคิดว่าเราต้องติดตามว่าการวัดของคุณคืออะไรมิฉะนั้นฉันกังวลว่าเราจะเปรียบเทียบแอปเปิ้ลกับส้ม
DW

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