Weiß jemand, ob es einen Algorithmus zum direkten Schreiben der kontextfreien Grammatik gibt, die einen bestimmten regulären Ausdruck erzeugt?
7
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.
quelle
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. WennS1 und S2 sind Nicht-Terminals, die Ausdrücke erzeugen E1 und E2 dann können wir erzeugen E1+E2 durch S und die Regeln S→S1 , S→S2 . Wir können Verkettung erzeugenE1E2 durch S und die Regel S→S1S2 . E1∗ durch S und die Regeln S→S1S , S→λ . Angenommen, wir wählen jedes Mal neue Nicht-Terminals.
quelle
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 generiertr .
Ein rekursiver Algorithmus zum Erstellen einer kontextfreien GrammatikG mit L(G)=L(r) geht wie folgt:
Dies entspricht im Wesentlichen Hendriks Antwort, enthält jedoch weitere Einzelheiten, die nützlich sein können.
quelle