REGEX uygulamalarının çoğu karmaşıklık ölçeğine nerede düşer?


19

Perl veya .NET gibi düzenli ifadelerin modern uygulamalarının çoğu, ileri ve geriye bakış gibi özelliklere sahip klasik bilgisayar bilimi REGEXes tanımının ötesine geçer. Bu özellikler, sonlu, aşağı itilmeyen bir otomasyonla tanımlanamayan ifadeleri ayrıştırmaya izin veriyor mu? Turing'e ne kadar yakın olursa, bu onları mümkün kılar mı?


2
Yakından ilişkili bir soru: "Backreferences ile regexes" ve "keyfi program kodu içerebilen regexes" arasında ilginç bir şey var mı? Örneğin, backreferences ve lookahead / lookbind içeren regex'ler , backreferences içeren regexes'ten kesinlikle daha etkileyici, ancak lookahead / lookbehind yok mu? Perl'de "Özel Geri İzleme Kontrol Fiilleri" ne olacak?
Jukka Suomela

İlgili (ve muhtemelen yanlış): stackoverflow.com/questions/2974210/…
Aryabhata

Yanıtlar:


18

Asıl sorunun sınırsız ne anlama geldiğini düşünmüyorum; bu ayrıştırmadaki diğer durumlardan daha kötü değildir.

Sorun, hem çok güçlü hem de çok sınırlı olan geriye dönük referansları karakterize etmektir: bazı bağlamsız dillere izin vermeden, bağlamsız bazı dillerin tanımlanmasına izin verir. Örneğin, normal ifade bir nb a nb a n(a*)b\1b\1 formunun dizeleriyle eşleşir ve bunun bağlamsız bir dil olmadığını göstermek için pompalama lemmasını kullanabilirsiniz. Ancak, diğer yandan, geri başvurularla yapılan düzenli ifadeler, prototipik bağlamdan bağımsız dil olan dengeli parantez diliyle eşleşmek için yeterli görünmemektedir.anbanban

Regexes için bir dilde hangi dizelerin olduğunu söyleyen bir anlamsal semantik vermek yeterince kolaydır, ancak iyi bir otomata-teorik karakterizasyon vermek çok daha zordur. Kayıtları, girdilerinizin alt dizelerini kopyalayabileceğiniz ve geçerli dizenizi sınamak için kullanabileceğiniz, ancak bu kayıtları değiştirme yeteneğiniz olmayan bir kayıt makinesi gibi bir şeydir.

Sonlu model teorisi yapan insanlar bir sürü korkak makine modeline sahiptir ve bunun modellerinden herhangi birine karşılık gelip gelmediğini bilmek ilginç olacaktır.


9

/(.*)\1/L={ww|wΣ}wKLK={ww|wΣ*,|w|≤K}K

Ancak prensip olarak, belirtilen regexps normal dillerden daha güçlüdür, çünkü bu ilgili soru çok daha ayrıntılı olarak tartışmaktadır (şık bir örnekle de).


{Ww | w ∈ Σ ∗, ∣w∣≤K} bir CSL veya TM tarafından tanınabilir olmaz mı ??
dhruvbird

Arggh. ww ^ R yapmalıydı. düzeltir. teşekkürler
Suresh Venkat

Aslında bu konuda bir sorum vardı. WW bir CSL mi yoksa turing tanınabilir mi? Ben (henüz) bunun için bir LBA gelemedi, bu yüzden sadece merak ediyorum ...
dhruvbird

1
{ww:wΣ}

5

Suresh Venkat tarafından da bağlantılı olan bu diğer sorudan alınan ilginç bir sonuç, "Pratik" normal ifadelerin NP-tam olması ve bu nedenle SAT'a güç bakımından eşdeğer olmalarıdır.

Uzman olmayan biri olarak, sezgisel olarak "backreferences ile yapılan normal ifadelerin dengeli parantez diliyle eşleşmek için yeterli görünmediğini" kabul ederken, garip bir şeyler oluyor. NP tamlığı, herhangi bir NP sorununun polinom olarak regexp'e indirgenebileceğini ima eder, bu nedenle muhtemelen "dengeli parantezler" dilinden regexps ile tanınabilir olana polinomik bir azalma vardır. Fakat yine de, asal olmayan sayıları ayrıştırabildikleri için bir CFL'yi ayrıştırmak için bazı saçma normal ifadeler olabilir!

Muhtemelen ders, karmaşıklık sınıflarının ve dil sınıflarının genel olarak karşılaştırılabilir olmamasıdır. Bu da sorunuzu yeniden ifade etmenizi, "karmaşıklık ölçeği" yerine Chomsky hiyerarşisine başvurmayı önerir (adil olmak gerekirse, bununla karıştırılmasam bile).

Charles Stewart şöyle yazar:

Aho, 1990, "Dizelerde örüntü bulma algoritmaları", geri izlemeli normal diller için üyelik sorununun NP olduğunu gösteriyor.

Kısmi bir önizleme (en azından ifadenin) Google Kitaplar'da , sayfa 289'da bulunabilir ve makaleye bibliyografik bir referans burada bulunabilir . Makalede rewbr'un BackReferences ile Düzenli İfade anlamına geldiğini unutmayın.


3

"Düzenli ifadeler" in en popüler uygulaması olan PCRE, geri bildirimlerin ötesine geçen özyinelemeli kalıplar da uygular. Onların karmaşıklığı ile ilgili bir soru sadece istendi Stackoverflow at. Perl guru brian d foy'nin pratik derinlemesine cevabına göre, bu PCRE'yi bağlamsız gramerler kadar güçlü hale getiriyor. Ancak sözdizimi Backus-Naur Formuna göre çok kötü.

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.