Frage

Ich bin eine Klasse auf Finite Automata nehmen. Ich bereite eine Halbzeit- und Mühe habe Grammatiken für bestimmte Sprachen zu schaffen. Während ich die einfachen sehr intuitiv finden, wenn sie immer komplexer werden, scheine ich nicht zu wissen, wo ich anfangen soll. Zum Beispiel:

L = {w E {a, b, c} *: nb (w) = na (w) + nc (w)}

Die Antwort lautet:

S ? S1 | S2
S1 ? BS3 | S3b | S3bS3
S3 ? S0 | S1
S2 ? XS4 | S4X | S4XS4
S4 ? S | S2
S0 ? bS0XS0 | XS0bS0 | e
X ? a | c

Wenn jemand mir eine wenig Anleitung auf dem Denkprozess beteiligt geben könnte, wäre es sehr zu schätzen.

War es hilfreich?

Lösung

Die Sprache aufgeführt Sie ist unklar. Ich gehe davon aus w E {a,b,c}* Mittel w ε {a,b,c}* und nb(w) != na(w) + nc(w) bedeutet, dass alle Zeichenfolgen in der Sprache eine Reihe von b haben ist nicht auf die Summe der Anzahl der Einsen und die Anzahl der c die gleichen.

Wenn dies der Fall ist, haben Sie über die Eigenschaften aller Saiten zu denken, die in der Sprache sein, und alle Eigenschaften, die eine Zeichenfolge aus, die in dieser Sprache ausschließen.

Diese Sprache akzeptiert Strings, wo die Zahl der bs = / = die Nummer eines der + Anzahl der c ist. Wir können diese Sprache umformulieren zu sein, die Strings, dass akzeptiert:

Anzahl a der + Nummer c die> Anzahl der b des ODER + Anzahl a der Nummer c b des

Dies erklärt die ersten S -> S1 | S2

S1 stellen sicher, dass mindestens 1 b (S3), und dann Kräfte entweder eine gleiche Menge des als b a des c und die (S0) oder mehr ist, als b a des c und die (S1). Das Nettoergebnis der S1-Regel ist eine Zeichenfolge mit mehr b der als a der und c ist.

S2 stellt sicher, dass es mehr a des und / oder c ist als b der ist. Es tut dies, indem sie ein a oder c (X) zu zwingen, dann eine gleiche Menge an a der ermöglicht / c des (S0) oder mehr a / der c ist als b ist (S2 wieder).

Dies ist spezifisch für Ihr Beispiel, aber Sie können Art sehen, wie der Denkprozess, der in der Erstellung dieser Grammatik geht:

  1. Formulieren Sie die Sprache als konkrete Fälle (a / der c des> oder <b der)
  2. Für jeden der Fälle beginnen sicher der Fall, indem sie halten wird (Kraft # b des> als a / der c die durch mindestens eine b zwingen), dann die Zeichenfolge erweitert alle Möglichkeiten gleich a des schließen / c des und b des oder weniger a / der c ist als b ist.
  3. Symmetrisch den anderen Fall behandeln.

Das Problem ist, dass Sie sicherstellen müssen, dass, dass jeder String in der Sprache erzeugt wird, und alle Saiten nicht in der Sprache werden nicht erzeugt. (Wieder lesen Sie diese, bis sie die Implikation sinkt in)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top