Eine Grammatik ist regelmäßig, wenn es entweder rechts-linear oder links-linear ist. This tutorial behauptet, dass aus diesem Grunde hat die besondere Eigenschaft:Wie reguläre Grammatik mit Rekursion und Alternationen in reguläre Ausdruck konvertieren
Eine regelmäßige Grammatik hat eine besondere Eigenschaft: von jedem Nicht-End-Substitution (mit Ausnahme der Wurzel eins) mit seiner rechten Seite, können Sie es zu einer Verringerung unten Einzelfertigung für die Wurzel, mit nur Terminals und Betreibern auf der rechte Seite ... die reduzierten Expression von Terminals und Operatoren kann in einer noch kompakten Form geschrieben werden, genannt einen regulären Ausdruck
Also habe ich beschlossen, das zu testen Idee und die Normal-EcmaScript grammar for IdentifierName in Normal-Ausdrücke konvertieren:
IdentifierName ::
IdentifierStart
IdentifierName IdentifierPart
Es sei IdentifierStart
und IdentifierPart
sind beschränkt auf die folgenden:
IdentifierStart :: IdentifierPart ::
A A
B C
C &
$
_
Aber ich bin nicht sicher, wie da die Grammatik sowohl für IdentifierName
muss gehen Rekursion und Alternation. Irgendeine Hilfe?
Ich interessiere mich eher für den Ansatz als für das Finden der resultierenden Regexp, die wie @Bergi zeigte [ABC$_][AC&]*
.
Ein IdentifierName ist entweder ein IdentifierName gefolgt von einem IdentifierPart oder einem IdentifierStart, wenn IdentifierStart S ist und IdentifierPart P ist, dann sind einige legale IdentifierNames S, SP, SPP und so weiter ...IE ein S gefolgt von einigen Ps. kannst du an eine Regex denken, um das zu erreichen? –
Nur '[ABC $ _] [AC &] *' – Bergi
@Bergi, danke, aber ich interessiere mich eher für den Ansatz der Ersetzung als für die Regexp selbst. Oder ist das Beispiel zu simpel, so dass es möglich ist, mit der Regexp zu kommen, ohne dem Ansatz zu folgen? –