2015-09-03 16 views
7

Sto leggendo il codice di un parser di espressioni regolari e comincio a chiedermi se la sintassi dell'espressione regolare è essa stessa regolare e può essere espressa con un'altra (abbastanza complicata) espressione regolare?È possibile analizzare un'espressione regolare per sé con un'espressione regolare?

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 

non vedo alcuna struttura ricorsiva nella sintassi delle espressioni regolari, quindi penso che forse questo è fattibile?

Se è così, come si presenta l'espressione? Se no, perché?

+3

No. È necessaria la grammatica context-free per analizzare l'espressione regolare. Le parentesi nidificate non possono essere analizzate con un'espressione regolare (teorica). – nhahtdh

+0

Sì, parentesi nidificate. L'ho dimenticato. Ma se non sostengo il gruppo all'interno del gruppo, la risposta sarebbe diversa? – NeoWang

+1

@NeoWang: Allora quello che hai è più debole dell'espressione regolare. cioè ci sono delle lingue dove può essere descritta l'espressione regolare/grammatica regolare, ma non la tua grammatica. – nhahtdh

risposta

3

Non è possibile analizzare le parentesi nidificate con un'espressione regolare perché è necessario lo stato infinito per farlo. Quindi la risposta è no. Quello che stai cercando si chiama context-free grammars.

Problemi correlati