ความสำคัญของรูปแบบปกติเช่น Chomsky รูปแบบปกติสำหรับ CFG


12

ฉันเข้าใจว่าสามารถใช้ไวยากรณ์แบบไม่มีบริบทเพื่อแสดงภาษาที่ไม่มีบริบทได้ซึ่งอาจมีความคลุมเครือ เรายังมีรูปแบบปกติเช่นChomskyและGreibachรูปแบบปกติ ฉันไม่เข้าใจความต้องการของสิ่งนั้น

ทำไมพวกเขาถึงมีความสำคัญในทฤษฎีภาษา? หนังสือทุกเล่มที่ฉันพูดถึงเกี่ยวกับรูปแบบปกติเหล่านี้ แต่ไม่ได้บอกอะไรเกี่ยวกับความสำคัญของพวกเขา


2
รูปแบบปกตินั้นมีประโยชน์เมื่อให้หลักฐานอันสร้างสรรค์
Karolis Juodelė

คำตอบ:


12

มีการใช้งานที่เกี่ยวข้องอย่างน้อยสองรายการ

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

    เป็นตัวอย่างที่เป็นรูปธรรมรูปแบบปกติของ Greibach ถูกนำมาใช้เพื่อแสดง (เชิงสร้างสรรค์) ว่ามี - PDA ที่ไม่มีการซื้อขายสำหรับทุก CFL (ที่ไม่มี )εε

  2. เปิดใช้งานการแยกวิเคราะห์
    ในขณะที่ PDA สามารถใช้ในการแยกคำด้วยไวยากรณ์ใด ๆ ซึ่งมักจะไม่สะดวก รูปแบบปกติช่วยให้เราสามารถทำงานกับโครงสร้างได้มากขึ้นส่งผลให้อัลกอริทึมการแยกวิเคราะห์ง่ายขึ้น

    เป็นตัวอย่างที่ชัดเจนอัลกอริทึม CYKใช้รูปแบบปกติของ Chomsky แบบฟอร์มปกติของ Greibach สามารถแยกวิเคราะห์แบบเรียกซ้ำ แม้ว่าอาจจำเป็นต้องใช้การย้อนรอย แต่ความซับซ้อนของพื้นที่เป็นเส้นตรง


5

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

ถ้าความยาวของการป้อนข้อมูลของคุณ ( ) เป็นแล้วคุณใช้อาร์เรย์ 2 มิติ ( ) ของสลัว x nInAnn

A[i,j]หมายถึงสัญลักษณ์ทั้งหมดในไวยากรณ์ที่สามารถได้รับมาสตริงย่อยJ)GI(i,j)

ในที่สุดถ้ามีสัญลักษณ์เริ่มต้น ( ) ก็หมายความว่าสตริงที่ฉันสามารถได้รับจากซึ่งเป็นสิ่งที่เราต้องการตรวจสอบA[1,n]SS

def decide (string s,grammar G):
    //base case
    for i=1 to n:
        N[i,i]=I[i]    //as the substring of length one can be generated by only a
                       terminal.
    //end base case

    //induction
    for s=1 to n:       //length of substring
        for i=1 to n-s-1: //start index of substring
            for j=i to i+s-1:   //something else
                 if there exists a rule A->BC such that B belongs to N[i,j] and C
                 belongs to N[j+1,i+s-1] then add A to N[i,i+s-1]
    //endInduction

    if S belongs to N[1,n] then accept else reject.

ฉันรู้ว่าดัชนีดูบ้ามาก แต่โดยทั่วไปนี่คือสิ่งที่เกิดขึ้น

  • ฉันคิดว่าตัวเรือนฐานค่อนข้างชัดเจน

  • ในขั้นตอนการอุปนัยเราสร้างโซลูชันสำหรับความยาวสตริงย่อยจากการแก้ปัญหาที่มีความยาวน้อยกว่าsss

  • บอกว่าคุณกำลังมองหาวิธีการแก้ปัญหาสำหรับความยาว substring ( ) เริ่มต้นที่ดัชนี1แล้วคุณจะเริ่มห่วง (อย่างอื่นบางส่วน) ..... ซึ่งการตรวจสอบว่ามีการปกครอง ( ) เช่นที่และได้รับมาสองสตริงต่อเนื่องกันและเคลื่อนย่อยและถ้าเป็นเช่นเพิ่มทั้งหมดเช่น's เพื่อ[1,6]5sub1A>BCBCAN[1,6]

  • สุดท้ายถ้าคุณมีสัญลักษณ์เริ่มต้นในคุณก็ยอมรับ!N[1,n]


  • 3
    นี่คืออัลกอริทึม CYK ซึ่งก) คุณควรตั้งชื่อเช่นนี้และข) ได้รับการกล่าวถึงในคำตอบของฉัน โปรดทราบว่าการโพลิโนเมียลรันไทม์นั้นน่าประทับใจเพราะอัลกอริทึมนั้นมีความเหมือนกันกับ CFG ทั้งหมดนั่นคือทั่วไป
    กราฟิลส์

    @ ราฟาเอลตกลง .... ฉันไม่รู้ชื่อ :)
    ishan3243

    4

    Sheila Greibach คิดค้นรูปแบบปกติของ Greibach เพื่อพิสูจน์ว่า CFG ทุกตัวสามารถรับรู้ได้โดย PDA ที่ทำงานในเวลาจริง (เช่นไม่มีซื้อขาย)ϵ

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