Grammars ปกติเทียบกับบริบทฟรี


101

ฉันกำลังเรียนเพื่อทดสอบภาษาคอมพิวเตอร์และมีความคิดหนึ่งที่ฉันกำลังมีปัญหาในการคิด

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

สิ่งที่ฉันมีปัญหาคือการทำความเข้าใจว่าฉันจะได้มาจากสิ่งที่กล่าวมาทั้งหมดได้อย่างไรโดยการรู้ว่าไวยากรณ์ปกติสามารถแมปกับเทอร์มินัลหรือ nonterminal ตามด้วยเทอร์มินัลหรือแมป nonterminal ที่ไม่มีบริบทกับการรวมกันของเทอร์มินัลและ nonterminals .

ใครช่วยฉันรวบรวมทั้งหมดนี้เข้าด้วยกันได้ไหม

คำตอบ:


73

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

ตัวอย่างเช่นสำหรับพาลินโดรมเป็นรูปแบบ

S->ABA
A->something
B->something

คุณสามารถเห็นได้อย่างชัดเจนว่า palindromes ไม่สามารถแสดงในไวยากรณ์ปกติได้เนื่องจากต้องเป็นเส้นตรงด้านขวาหรือด้านซ้ายและไม่สามารถมี non-terminal ทั้งสองด้าน

เนื่องจากไวยากรณ์ทั่วไปไม่คลุมเครือจึงมีกฎการผลิตเพียงกฎเดียวสำหรับ non-terminal ที่กำหนดในขณะที่อาจมีมากกว่าหนึ่งในกรณีของไวยากรณ์ที่ไม่มีบริบท


13
ประการแรกไวยากรณ์ทั่วไปอาจมีความคลุมเครือ (ตัวอย่างจาก Kai Kuchenbecker: S -> aA | aB, B -> a, A -> a) สิ่งเดียวคือมีเพียงวิธีเดียวเท่านั้นที่โหนดในโครงสร้างไวยากรณ์สามารถวางตำแหน่งได้ (ตัวอย่างเช่นไม่มีความคลุมเครือในการเชื่อมโยงเมื่อใช้ไวยากรณ์ปกติ) ประการที่สอง: สามารถมีได้มากกว่าหนึ่งด้านขวามือไปยัง non-terminal (A -> a, A -> aA; และ wikipedia ยังรวม epsilon เป็นทางเลือกที่สาม: en.wikipedia.org/wiki/Regular_grammar )
user764754

1
ความคลุมเครือเกิดขึ้นเมื่อประโยคสามารถมาจากไวยากรณ์ของคุณได้มากกว่าหนึ่งเส้นทาง การมีกฎการผลิตมากกว่าหนึ่งข้อสำหรับ non-terminal ไม่ทำให้ไวยากรณ์คลุมเครือ
Sujoy

11
ตัวอย่างนี้ผิดจริง ถ้าเราคิดกฎเต็มรูปแบบที่จะเป็นA-> a | cและB->bแล้วไวยากรณ์นี้จะช่วยให้ palindromes ไม่ใช่ ตัวอย่างเช่นฉันสามารถผลิต: S->ABA->aBA->abA->abc. ปัญหาคือเราไม่ต้องการสร้างตัวแปรสองตัวในกฎข้อแรก แต่เป็นสองขั้ว ความเป็นไปได้สำหรับไวยากรณ์ที่อนุญาตให้ใช้ palindromes คือ:S -> aSa | bSb | a | b
gdiazc

มี palindromes ที่สามารถแสดงในไวยากรณ์ปกติ: palindromes ที่ประกอบด้วยอักขระเดี่ยว ตัวอย่างเช่นS -> aSa | eและa(aa)*aทั้งสองอธิบายภาษาปกติ สิ่งนี้แสดงให้เห็นว่า CFG สามารถอธิบายภาษาปกติได้แม้ว่าจะละเมิดความเป็นเชิงเส้นด้านซ้ายหรือด้านขวาก็ตาม เป็นที่ยอมรับนี้เป็นประโยคที่ไม่ให้เห็นได้ชัด ..
Martijn

ลองคิดดูคำตอบนี้ผิดจริง มันบอกว่า "บริบท" ไวยากรณ์เป็นพื้นรวมกันของขั้วและ nonterminals ใด ๆ "อย่างไรก็ตามเฉิงตู ^ NVW ^ ^ mxy KZ คือการรวมกันของอาคารและ nonterminals แต่ไม่บริบทฟรี..
ชาร์ลีมาร์ติน

58

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

ดังนั้นถ้าเราคิดเกี่ยวกับคำขยายสำหรับภาษาทั่วไปสิ่งที่พูดโดยพื้นฐานแล้วก็คือภาษาปกติใด ๆ สามารถแบ่งออกเป็นสามส่วนx , yและzโดยที่อินสแตนซ์ทั้งหมดของภาษาอยู่ในxy * z (โดยที่ * คือการทำซ้ำของคลีนคือ 0 หรือมากกว่าสำเนาของy ) โดยพื้นฐานแล้วคุณมี "nonterminal" หนึ่งชุดที่สามารถขยายได้

ตอนนี้ภาษาที่ไม่มีบริบทเป็นอย่างไร มีคำขยายที่คล้ายคลึงกันสำหรับภาษาที่ไม่มีบริบทซึ่งแบ่งสตริงในภาษาออกเป็นห้าส่วนคือuvxyzและโดยที่อินสแตนซ์ทั้งหมดของภาษาอยู่ในuv i xy i zสำหรับ i ≥ 0 ตอนนี้คุณมี"nonterminals สองตัว "ที่สามารถทำซ้ำหรือสูบตราบเท่าที่คุณมีหมายเลขเดียวกัน


10
ภาษาที่ไวต่อบริบทไม่จำเป็นต้องใช้เครื่องทัวริงเต็มรูปแบบ หุ่นยนต์ที่มีขอบเขตเชิงเส้นก็เพียงพอแล้ว นี่คือเครื่องทัวริงที่มีเทป จำกัด ขนาดถูกล้อมรอบด้วยฟังก์ชันเชิงเส้นบนสตริงอินพุต
Dave Clarke

16

ความแตกต่างระหว่างไวยากรณ์แบบปกติและแบบไม่มีบริบท: (N, Σ, P, S): เทอร์มินัล, nonterminals, การผลิต, สัญลักษณ์สถานะเริ่มต้น

●สัญลักษณ์พื้นฐานของภาษาที่กำหนดโดยไวยากรณ์ที่เป็นทางการ

● abc

สัญลักษณ์ nonterminal (หรือตัวแปรวากยสัมพันธ์)

●แทนที่ด้วยกลุ่มสัญลักษณ์เทอร์มินัลตามกฎการผลิต

● ABC

ไวยากรณ์ปกติ: ไวยากรณ์ปกติขวาหรือซ้ายขวาไวยากรณ์ปกติกฎทั้งหมดเป็นไปตามแบบฟอร์ม

  1. B → a โดยที่ B เป็น nonterminal ใน N และ a คือเทอร์มินัลในΣ
  2. B → aC โดยที่ B และ C อยู่ใน N และ a อยู่ในΣ
  3. B →εโดยที่ B อยู่ใน N และεหมายถึงสตริงว่างนั่นคือสตริงของความยาว 0

ออกจากไวยากรณ์ปกติกฎทั้งหมดเป็นไปตามแบบฟอร์ม

  1. A → a โดยที่ A เป็น nonterminal ใน N และ a คือเทอร์มินัลในΣ
  2. A → Ba โดยที่ A และ B อยู่ใน N และ a อยู่ในΣ
  3. A →εโดยที่ A อยู่ใน N และεคือสตริงว่าง

ไวยากรณ์ที่ไม่มีบริบท (CFG)

○ไวยากรณ์ที่เป็นทางการซึ่งกฎการผลิตทั้งหมดอยู่ในรูปแบบ V → w

○ V เป็นสัญลักษณ์ที่ไม่เกี่ยวกับระยะเวลาเดียว

○ w คือสตริงของเทอร์มินัลและ / หรือ nonterminals (w สามารถว่างได้)


5

ไวยากรณ์ปกติ: -ไวยากรณ์ที่มีการผลิตดังต่อไปนี้คือ RG:

V->TV or VT
V->T

โดยที่ V = variable และ T = terminal

RG อาจเป็นไวยากรณ์เชิงเส้นซ้ายหรือไวยากรณ์เชิงเส้นด้านขวา แต่ไม่ใช่ไวยากรณ์เชิงเส้นตรงกลาง

อย่างที่เราทราบกันดีว่า RG ทั้งหมดเป็น Linear Grammar แต่มีเพียง Left Linear หรือ Right Linear Grammar เท่านั้นที่เป็น RG

ไวยากรณ์ปกติอาจไม่ชัดเจน

S->aA|aB
A->a
B->a

ไวยากรณ์ที่ไม่ชัดเจน: -สำหรับสตริง x มีมากกว่าหนึ่ง LMD หรือมากกว่า RMD หรือมากกว่าหนึ่งต้นไม้แยกวิเคราะห์หรือหนึ่ง LMD และหนึ่ง RMD แต่ทั้งสองสร้างแผนภูมิการแยกวิเคราะห์ที่แตกต่างกัน

                S                   S

              /   \               /   \
             a     A             a     B
                    \                   \
                     a                   a

ไวยากรณ์นี้เป็นไวยากรณ์ที่ไม่ชัดเจนเนื่องจากโครงสร้างการแยกวิเคราะห์สองแบบ

CFG: - ไวยากรณ์ที่กล่าวว่าเป็น CFG หากการผลิตอยู่ในรูปแบบ:

   V->@   where @ belongs to (V+T)*

DCFL: - อย่างที่เราทราบกันดีว่า DCFL ทั้งหมดเป็นไวยากรณ์ LL (1) และ LL (1) ทั้งหมดคือ LR (1) ดังนั้นจึงไม่คลุมเครือ ดังนั้น DCFG จะไม่คลุมเครือ

นอกจากนี้เรายังรู้ว่า RL ทั้งหมดเป็น DCFL ดังนั้น RL จึงไม่คลุมเครือ โปรดทราบว่า RG อาจไม่ชัดเจน แต่ไม่ใช่ RL

CFL: CFl อาจหรือไม่คลุมเครือ

หมายเหตุ: RL จะไม่คลุมเครือโดยเนื้อแท้


4

นิพจน์ทั่วไป

  • พื้นฐานของการวิเคราะห์ศัพท์
  • เป็นตัวแทนของภาษาปกติ

ไวยากรณ์ฟรีตามบริบท

  • พื้นฐานของการแยกวิเคราะห์
  • แสดงโครงสร้างภาษา

ป้อนคำอธิบายภาพที่นี่


ไม่ใช่คำอธิบายสั้น ๆ โปรดอ่านอีกครั้งและตรวจสอบภาพ
Ahmed Salem

3

ไวยากรณ์ไม่มีบริบทหากกฎการผลิตทั้งหมดมีรูปแบบ: A (นั่นคือด้านซ้ายของกฎสามารถเป็นตัวแปรเดียวได้เท่านั้นด้านขวาไม่ จำกัด และอาจเป็นลำดับของเทอร์มินัลและตัวแปรใดก็ได้) เราสามารถกำหนดไวยากรณ์เป็น 4-tuple โดยที่ V เป็นเซต จำกัด (ตัวแปร), _ คือเซต จำกัด (เทอร์มินัล), S คือตัวแปรเริ่มต้นและ R คือเซตของกฎที่ จำกัด
ไวยากรณ์ปกติของV เป็นแบบเส้นตรงหรือเส้นซ้ายในขณะที่ไวยากรณ์อิสระตามบริบทจะรวมกันระหว่างเทอร์มินัลและไม่ใช่เทอร์มินัล ด้วยเหตุนี้เราจึงสามารถพูดได้ว่าไวยากรณ์ปกติเป็นส่วนย่อยของไวยากรณ์ที่ไม่มีบริบท หลังจากคุณสมบัติเหล่านี้เราสามารถพูดได้ว่าชุดภาษาฟรีตามบริบทยังมีชุดภาษาปกติ


-1

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


-4

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


4
@dinesh ไวยากรณ์ปกติอาจคลุมเครือ จำไว้ว่าไวยากรณ์มีความคลุมเครือหากมีโครงสร้างไวยากรณ์ที่แตกต่างกันสองรายการและมีป้ายกำกับว่าโครงสร้างไวยากรณ์ ดังนั้นต้นไม้ไอโซมอร์ฟิกจึงเป็นต้นไม้ที่แตกต่างกัน ได้แก่ ไวยากรณ์ง่ายๆเช่น S -> aA | aB, B -> a, A -> a มีความคลุมเครือเนื่องจากมีโครงสร้างไวยากรณ์สองแบบสำหรับคำว่า 'aa' ที่เป็นไอโซมอร์ฟิก แต่แตกต่างกัน
Kai Kuchenbecker
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.