POSIX BRE tüm normal dilleri ifade edebilir mi?


13

POSIX.1-2008 tarafından tanımlandığı şekliyle "Temel Düzenli İfadeler" alternatifi desteklememektedir a|b(bazı grep uygulamaları kaçan sürümü tanımasına rağmen \|).

Normal diller tanım gereği birlik altında kapatıldığından POSIX BRE'nin sonlu bir otomattan daha az etkileyici gücü olduğu anlamına mı geliyor? Ya da diğer yapıları kullanarak değişimi simüle etmenin bir yolu var mı?

Yanıtlar:


17

Aslında POSIX BRE dili, alternatifi olmadığı için tüm normal ifadeleri ifade edemez. Tüm normal dilleri bir yana bırakıp tüm sonlu dilleri bile tanıyamaz.

Örneğin, bir BRE olarak tanınamaz. Bunu kanıtlamak için, üst düzey sözdizimsel formun ne olabileceğini düşünün:{ab,ba}

  • Dilin sözcükleri olduğu için tek karakterli formlardan biri olamaz .>1
  • R
  • R{m,n}m=n=1
  • R1R2ab
    • R1abR2R1{ab,ba}
    • R1aabR2bR1R2ubR1uR1aba
    • R1abaRabR1R2

“Orijinal soruna geri döndüğümüzde”, bir BRE bulmak için tek çözüm dili tanıdığı anlamına gelir, aynı özelliğe sahip daha küçük bir BRE bulmaktır. Bu sonsuz bir iniştir , bu yüzden istenen özelliğe sahip BRE yoktur.

BRE tarafından tanınan dillerin “hoş” bir karakterizasyonu olduğunu düşünmüyorum, örneğin “hoş” bir otomata sınıfı tarafından tanınan diller gibi.

{www{a,b}}\(.*\)\1


1
Eşlenecek birden fazla satır satırından oluşan ifadeyi kabul edebilen grep gibi bir araç kullanıyorsanız, tüm olası alternatiflerin kartezyen ürününü alıyor (örneğin, {ab, ba} {ab, ba} {abba, abba, baab, baba}) herhangi bir "BRE-plus-alternation" ve dolayısıyla herhangi bir normal dile eşdeğer olmak için yeterli mi?
Random832

1
@ Random832: Yapmaya çalışın (abc|bac)*.
rici
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.