2015-09-03 4 views
7

Ich lese den Code eines regulären Ausdruck Parsers, und frage mich, ob die Syntax der regulären Ausdruck selbst regelmäßig ist, und kann mit einem anderen (ziemlich kompliziert) regulären Ausdruck ausgedrückt werden?Kann ein regulärer Ausdruck selbst mit einem regulären Ausdruck analysiert werden?

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 

Ich sehe keine rekursive Struktur in regulären Ausdruckssyntax, also denke ich, dass dies machbar ist?

Wenn ja, wie sieht der Ausdruck aus? Wenn nicht, warum?

+3

Nein. Sie benötigen kontextfreie Grammatik zum Analysieren des regulären Ausdrucks. Verschachtelte Klammern können nicht mit (theoretischem) regulärem Ausdruck analysiert werden. – nhahtdh

+0

Ja, verschachtelte Klammern. Ich habe das vergessen. Aber wenn ich die Gruppe innerhalb der Gruppe nicht unterstütze, wäre die Antwort anders? – NeoWang

+1

@NeoWang: Dann ist das, was Sie haben, schwächer als der reguläre Ausdruck. es gibt Sprachen, in denen regulärer Ausdruck/reguläre Grammatik beschrieben werden kann, aber nicht Ihre Grammatik. – nhahtdh

Antwort

3

Sie können verschachtelte Klammern nicht mit einem regulären Ausdruck parsen, da Sie hierfür einen unendlichen Status benötigen. Also die Antwort ist nein. Was Sie suchen, heißt context-free grammars.