2015-09-03 18 views
7

Düzenli bir ifade ayrıştırıcısının kodunu okuyorum ve düzenli ifadenin sözdiziminin kendisinin düzenli olup olmadığını merak etmeye ve başka bir (oldukça karmaşık) düzenli ifade ile ifade edilebilir mi acaba?Düzenli bir ifadenin kendisi normal bir ifadeyle ayrıştırılabilir mi?

rere = "" # the regular expression of regular language 
match1 = re.match(rere, "[a-z][email protected][a-z]+.com") # True 
match2 = re.match(rere, ")az[") # False 

Ben düzenli ifade sözdiziminde herhangi özyinelemeli yapısını görmüyorum, bu yüzden belki bu yapılabilir olduğunu düşünüyorum ?

Olursa, ifade nasıl görünür? Değilse, neden?

+3

Hayır. Normal ifadeyi ayrıştırmak için bağlama içermeyen dilbilgisine ihtiyacınız var. İç içe geçmiş parantezler (teorik) düzenli ifadeyle ayrıştırılamaz. – nhahtdh

+0

Evet, iç içe parantezler. Bunu unutmuştum. Ama grubun içindeki grubu desteklemiyorsam, cevap farklı olur mu? – NeoWang

+1

@NeoWang: O zaman sahip olduğunuz şey normal ifadeden daha zayıftır. Yani, düzenli ifadenin/düzenli dilbilgisinin tanımlanabildiği, ancak dilbilgisinin olmadığı diller vardır. – nhahtdh

cevap

3

İç içe parantezleri normal bir ifadeyle ayrıştıramazsınız, çünkü bunu yapmak için sonsuz duruma ihtiyacınız vardır. Dolayısıyla cevap hayır. Aradığınız şey context-free grammars olarak adlandırılır.

İlgili konular