POSIX BRE สามารถแสดงภาษาปกติทั้งหมดได้หรือไม่


13

ปรากฏว่า "นิพจน์ธรรมดาพื้นฐาน" ตามที่กำหนดโดยPOSIX.1-2008ไม่สนับสนุนการสลับกันa|b(แม้ว่าการใช้ grep บางตัวจะรู้จักเวอร์ชันหลบหนี\|)

เนื่องจากภาษาปกติถูกปิดภายใต้การรวมกันตามคำนิยามนี่หมายความว่า POSIX BRE มีพลังในการแสดงออกน้อยกว่าออโตเมติก จำกัด ? หรือมีวิธีการจำลองการสลับโดยใช้โครงสร้างอื่น ๆ ?

คำตอบ:


17

อันที่จริงแล้วภาษา POSIX BRE ไม่สามารถแสดงออกถึงการแสดงออกปกติทั้งหมดได้เพราะมันไม่มีทางเลือก มันไม่สามารถรู้จำภาษาที่ จำกัด ทั้งหมดแม้แต่ภาษาปกติทุกภาษา

ตัวอย่างเช่นไม่รู้จักเป็น BRE เพื่อพิสูจน์สิ่งนี้พิจารณารูปแบบวากยสัมพันธ์ระดับสูงที่อาจจะเป็น:{ab,ba}

  • มันไม่สามารถเป็นหนึ่งในรูปแบบตัวเดียวตั้งแต่ภาษาที่มีคำพูดของความยาว1>1
  • ไม่สามารถเป็นเพราะจะจับคู่สตริงว่างR
  • มันไม่สามารถเป็นยกเว้นด้วย (ในกรณีนี้เรากลับไปที่ปัญหาดั้งเดิม) เพราะมันจะจับคู่สตริงที่มีความยาวต่างกันหรือสตริงว่างR{m,n}m=n=1
  • ดังนั้นมันจะต้องมีการเรียงต่อกัน:R_2 ทีนี้ลองพิจารณาว่าได้รับการยอมรับ: R1R2ab
    • หากรู้จักดังนั้นต้องไม่รู้จักสิ่งอื่นใดนอกจากสตริงว่าง ดังนั้นต้องรู้จักและเรากลับไปที่ปัญหาเดิมR1abR2R1{ab,ba}
    • หากตระหนักแต่ไม่แล้วต้องยอมรับขแต่แล้วตระหนักถึงคำทุกคำในรูปแบบที่ตระหนักดังนั้นต้องไม่รับรู้อะไรอื่นนอกจาก ไม่มีทางที่จะรับรู้ไม่ได้BAR1aabR2bR1R2ubR1uR1aba
    • หากไม่รู้จักทั้งและวิธีเดียวที่จะรู้จักคือถ้ารู้จักสตริงว่างเปล่าในกรณีนี้เรากลับไปที่ปัญหาเดิมตามข้างต้น แต่สำหรับในเวลานี้R1abaRabR1R2

เมื่อ“ เรากลับไปที่ปัญหาดั้งเดิม” นั่นหมายความว่าทางออกเดียวที่จะหา BRE ตระหนักถึงภาษาคือการหา BRE ที่เล็กลงซึ่งมีคุณสมบัติเดียวกัน นี่คือการสืบเชื้อสายที่ไม่มีที่สิ้นสุดดังนั้นจึงไม่มี BRE ที่มีคุณสมบัติที่ต้องการ

ฉันไม่คิดว่าจะมีลักษณะที่ "ดี" ของภาษาที่เป็นที่รู้จักของ BRE เช่นภาษาที่เป็นที่รู้จักโดยออโตมาตาคลาส "ดี"

โปรดทราบว่าภาษาที่รู้จักโดย BRE นั้นไม่ได้เป็นคลาสย่อยของภาษาปกติเนื่องจากการอ้างอิงกลับช่วยเพิ่มพลังในการแสดงออก ตัวอย่างเช่นได้รับการยอมรับโดย BRE แต่มีชื่อเสียงไม่ปกติ BRE ที่ไม่มีการอ้างอิงย้อนหลังเป็นเพียงการสร้างประโยคให้กับการแสดงออกปกติดังนั้นภาษาที่พวกเขาสามารถจดจำได้คือซับคลาสของภาษาปกติ{www{a,b}}\(.*\)\1


1
หากคุณกำลังใช้เครื่องมือเช่น grep ซึ่งสามารถยอมรับนิพจน์ที่คั่นด้วยการขึ้นบรรทัดใหม่หลายรายการกำลังนำผลิตภัณฑ์คาร์ทีเซียนของการสลับเปลี่ยนทั้งหมด (เช่น {ab, ba} {ab, ba} กลายเป็น {abba, abba, baab, baba}) เพียงพอที่จะเทียบเท่ากับ "BRE-plus-alternation" ที่ได้รับและดังนั้นจึงเป็นภาษาปกติใด ๆ
Random832

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