มีส่วนขยายของนิพจน์ทั่วไปที่รวบรวมบริบทภาษาที่ไม่มีบริบทหรือไม่


25

ในเอกสารจำนวนมากที่เกี่ยวข้องกับไวยากรณ์ที่ไม่มีบริบท (CFGs) ตัวอย่างของไวยากรณ์ดังกล่าวที่นำเสนอที่นั่นมักจะยอมรับลักษณะของภาษาที่พวกเขาสร้างขึ้นได้ง่าย ตัวอย่างเช่น:

SaaSb
S

สร้าง ,{a2ibi|i0}

SaSb
SaaSb
S

สร้างและ{aibjij0}

SaSa
SbSb
S

สร้างหรือเทียบเท่า (โดยที่หมายถึงส่วนที่จับโดย ){wwRw(a|b)}{((a|b))1((a|b))2p1=p2R}p1(...)1

ตัวอย่างข้างต้นทั้งหมดสามารถสร้างขึ้นได้โดยการเพิ่มดัชนี ( ), ข้อ จำกัด ง่ายๆในดัชนีเหล่านี้ ( ) และการจับคู่รูปแบบกับนิพจน์ทั่วไป นี่ทำให้ฉันสงสัยว่าทุกภาษาที่ไม่มีบริบทสามารถสร้างขึ้นได้ด้วยการขยายการแสดงออกปกติaii>j

มีส่วนขยายของนิพจน์ทั่วไปที่สามารถสร้างชุดย่อยที่สำคัญทั้งหมดของภาษาที่ไม่มีบริบทหรือไม่


3
สังเกตว่าการเพิ่มดัชนีและข้อ จำกัด นั้นมีประสิทธิภาพมากเกินไป: คุณจะสามารถกำหนดซึ่งไม่ใช่ CFL anbncn
Shaull

คำตอบ:


34

ใช่แล้ว กำหนดนิพจน์ที่ไม่มีบริบทให้เป็นคำที่สร้างโดยไวยากรณ์ต่อไปนี้:

g::=ϵEmpty string|cCharacter c in alphabet Σ|ggConcatenation|Failing pattern|ggDisjunction|μα.gRecursive grammar expression|αVariable expression

นี่คือตัวสร้างทั้งหมดสำหรับภาษาปกติยกเว้น Kleene star ซึ่งถูกแทนที่ด้วยตัวดำเนินการจุดตรึงทั่วไปและกลไกการอ้างอิงตัวแปร (ไม่จำเป็นต้องใช้ดาว Kleene เนื่องจากสามารถกำหนดเป็น .)กรัม* μ อัลฟ่าμα.ggμα.ϵgα

การตีความนิพจน์ที่ไม่มีบริบทต้องมีการบัญชีสำหรับการตีความตัวแปรอิสระ ดังนั้นกำหนดสภาพแวดล้อม ให้เป็นแผนที่จากตัวแปรภาษา (เช่นส่วนย่อยของ ) และปล่อยให้เป็นฟังก์ชันที่ทำงานเหมือนในอินพุตทั้งหมดยกเว้นและซึ่งผลตอบแทนภาษาสำหรับ\Σ * [ ρ | α : L ] ρρΣ[ρ|α:L]ρL ααLα

ตอนนี้ให้นิยามการตีความของนิพจน์ที่ไม่มีบริบทดังนี้:

[[ϵ]]ρ={ϵ}[[c]]ρ={c}[[g1g2]]ρ={w1w2|w1[[g1]]ρw2[[g2]]ρ}[[]]ρ=[[g1g2]]ρ=[[g1]]ρ[[g2]]ρ[[α]]ρ=ρ(α)[[μα.g]]ρ=nNLnwhereL0=Ln+1=Ln[[g]][ρ|α:Ln]

ด้วยการใช้ทฤษฎี Knaster-Tarski มันง่ายที่จะเห็นว่าการตีความของเป็นสิ่งที่แสดงออกน้อยที่สุดμα.g

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

แก้ไข: ไม่ฉันไม่รู้จักการอ้างอิงมาตรฐานสำหรับสิ่งนี้: ฉันทำงานด้วยความสนใจของฉันเอง อย่างไรก็ตามมันเป็นสิ่งก่อสร้างที่ชัดเจนพอที่ฉันมั่นใจว่าเคยถูกคิดค้นมาก่อน Googling ที่ไม่เป็นทางการเผยให้เห็น Joost Winter, Marcello Bonsangue และ Jan Rutten ภาษาล่าสุดของ Context-Free Languages, Coalgebraicallyซึ่งพวกเขาได้ให้คำจำกัดความที่แตกต่างกัน


นี่มันสุดยอดมาก มีชื่อหรือการอ้างอิงมาตรฐานสำหรับสิ่งนี้หรือไม่?
อเล็กซ์สิบบริงค์

5
Arto Salomaa ครอบคลุมสิ่งนี้ในหนังสือของเขา "ภาษาที่เป็นทางการ" ในปี 1973 เขาเรียกพวกเขาว่า "การแสดงออกที่เหมือนปกติ"
Tim Schaeffer

3

มีคำถามที่เกี่ยวข้องอย่างใกล้ชิด (และหลายคำตอบ) ใน MathOverflow เกี่ยวกับภาษาที่ฟังก์ชั่นการสร้างเป็นแบบองค์รวม

ที่น่าสนใจนิยาม Neel ของความหมายของข้างต้นสอดคล้องตรงกับ (สร้างสรรค์) หลักฐานของการดำรงอยู่ของการแก้ปัญหาชี่เพื่อ recursive สมพันธุ์ผ่านทฤษฎีบทชี่โดยปริยาย น่าเสียดายโครงร่างหลักฐานของเขาจะต้องมีข้อผิดพลาดเล็กน้อยเนื่องจากมีหลายกรณีที่สิ่งต่าง ๆ ไม่สิ้นสุด กล่าวอีกนัยหนึ่งมีเงื่อนไขในการเปลี่ยนแปลงของจาโคเบียนที่กำหนดโดยไวยากรณ์ที่ไม่เป็นเอกพจน์ซึ่งจำเป็น นี่อาจเป็นเหตุผลที่ Bonsangue-Rutten ต้องการจุดคงที่ที่จะได้รับการปกป้องเป็นวิธีหนึ่งที่จะประกันเงื่อนไขนี้ใน Jacobianμ


AFAICT, ฤดูหนาว, et al เท่านั้นที่ต้องระมัดระวังในการสั่งซื้อเพื่อให้แน่ใจว่าคุณสามารถใช้อนุพันธ์ของ Brzozowskiโดยการใช้อนุพันธ์ของกรัม [ μ อัลฟ่าμα.g[μα.g/α]g
Neel Krishnaswami

1

เราเพิ่งเผยแพร่โครงร่างของกรอบที่จะทำเช่นนั้น ดูใต้comp.compilersที่ฉันส่งการแจ้งเตือนพร้อมกับลิงก์

การพัฒนาใหม่นี้ใช้กับทฤษฎีบท Chomsky-Schuetzenberger และอาจถือได้ว่าเป็นผลที่สมบูรณ์ ชัมสกีเองได้รับรู้ถึงพัฒนาการและบ่งบอกถึงความปรารถนาที่จะ "ตามทัน"

พร้อมกับการพัฒนานี้เรายังสร้างความเท่าเทียมกันของสองสูตรที่แยกกันสำหรับการแสดงออกที่ไม่มีบริบท - หนึ่งซึ่งเป็นส่วนขยาย / เสร็จสิ้นในรูปแบบ mu-แคลคูลัส "จุดคงที่ที่น้อยที่สุด" ซึ่งได้รับการกำหนดขั้นสุดท้ายในปี 2014 และฉบับอื่น ๆ ที่เผยแพร่ในปี 2008


4
โปรดรวมข้อมูลที่เกี่ยวข้องทั้งหมดไว้ในคำตอบด้วย “ ดูภายใต้ comp.compilers” เป็นคำตอบที่ไม่ได้รับความช่วยเหลือในตอนนี้และมันจะไร้ประโยชน์โดยสิ้นเชิงในอีกไม่กี่เดือนข้างหน้า
Emil Jeřábekสนับสนุน Monica

มันผิดทั้งหมด Comp.compilers (ไม่เหมือนกับไซต์นี้และบล็อกอื่น ๆ โดยวิธีการ) จะถูกเก็บถาวรอย่างถาวร คุณจะพบรายละเอียดทั้งหมดที่คุณต้องการ มีลิงก์มากมายที่อาจพบได้ในบทความที่โพสต์ล่าสุดเช่นกัน นอกจากนี้ยังแตกต่างจากเว็บไซต์บล็อกที่เปิดให้บุคคลภายนอกเข้าชมและเป็นประโยชน์ต่อผู้ชมในวงกว้าง คุณไม่ควรมีปัญหาในการค้นหาสิ่งใดบน USENET - ซึ่งเป็นที่ที่แบบสอบถามเช่นนี้ควรได้รับการแก้ไขและพูดคุย หากคุณมีปัญหานี่คือลิงค์ groups.google.com/forum/#!topic/comp.compilers/YCa5jHUR1iQ
NinjaDarth

2
ปัญหาไม่ใช่ว่ามันไม่ได้ถูกเก็บถาวร แต่ที่เก็บมีขนาดใหญ่ เมื่อฉันมองหาหอจดหมายเหตุตอนนี้ฉันสามารถหาโพสต์ของคุณที่ไหนสักแห่งใกล้ด้านบน แต่เมื่อใครบางคนจะเห็นคำตอบนี้ไม่กี่เดือนหรือปีในอนาคตพวกเขาจะไม่มีความคิดที่จะเริ่มขุด เป็นการหยิ่งและหยาบคายที่ทำให้ผู้อ่านทำการค้นหาที่ยืดเยื้อและไม่น่าเชื่อถือเมื่อคุณชี้ไปยังตำแหน่งที่เฉพาะเจาะจงมากขึ้น ตอนนี้ฉันทำเพื่อคุณ ใช้เวลาประมาณ 30 วินาที คุณสามารถทำได้ด้วยตัวเอง
Emil Jeřábekสนับสนุน Monica
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.