Weiß jemand, ob es einen Algorithmus zum direkten Schreiben der kontextfreien Grammatik gibt, die einen bestimmten regulären Ausdruck erzeugt?
Weiß jemand, ob es einen Algorithmus zum direkten Schreiben der kontextfreien Grammatik gibt, die einen bestimmten regulären Ausdruck erzeugt?
Antworten:
Ich gehe davon aus, dass Sie eine Grammatik erhalten möchten, die dieselbe Sprache wie der angegebene reguläre Ausdruck generiert.
Sie können dies durch die folgenden Schritte erreichen:
Beide Übersetzungen sind Standard und werden in grundlegenden Lehrbüchern zu formalen Sprachen und Automaten behandelt. Beachten Sie, dass jede reguläre Grammatik auch kontextfrei ist.
Ja. Ich gebe die Antwort auf hoher Ebene ohne viele Details.
Zuerst müssen Sie die Ausdrücke analysieren. Dies kann mit einem einfachen rekursiven anständigen Parser erfolgen. Einige Beispiele im Web.
Dann sollten Sie dem Parser "semantische" Regeln hinzufügen, wenn Sie von der Rekursion zurückkehren. Diese sind Standard in jedem formalen Sprachtheoriekurs. Wenn und sind Nicht-Terminals, die Ausdrücke erzeugen und dann können wir erzeugen durch und die Regeln , . Wir können Verkettung erzeugen durch und die Regel . durch und die Regeln , . Angenommen, wir wählen jedes Mal neue Nicht-Terminals.
Wie bei einer früheren Antwort gehe ich davon aus, dass Sie eine Grammatik erhalten möchten, die dieselbe Sprache wie der angegebene reguläre Ausdruck generiert .
Ein rekursiver Algorithmus zum Erstellen einer kontextfreien Grammatik mit geht wie folgt:
Dies entspricht im Wesentlichen Hendriks Antwort, enthält jedoch weitere Einzelheiten, die nützlich sein können.