Rechte lineare Grammatik - ∞ Punkte
S->ε
S->1A
S->0S
S->9I
S->3C
S->5E
S->4D
S->2B
S->7G
S->6F
S->8H
F->3K
K->0F
A->2L
K->1G
A->5B
A->0J
B->7A
J->5A
G->6K
G->8S
H->9K
F->5S
K->2H
I->6E
I->5D
J->4S
D->8I
B->6S
K->9B
F->6A
G->9A
K->6L
K->4J
C->1E
L->8K
E->5C
B->4K
C->0D
J->2K
D->2C
A->9F
J->7C
C->6J
C->8L
E->0K
L->0C
B->9C
E->2S
L->6I
I->0L
J->0I
B->2I
I->3B
H->1C
I->7F
C->4H
F->1I
G->4I
I->0G
C->3G
F->8C
D->0A
E->3A
I->9H
A->7D
C->2F
H->7I
A->8E
F->9D
E->8F
A->6C
D->6G
G->0E
D->5F
E->9G
H->2D
D->7H
H->3E
I->2A
K->3I
C->9S
C->7K
E->4B
D->1B
L->1D
J->9E
I->1S
E->1L
J->8D
D->9J
L->2E
J->3L
B->5L
B->8B
L->7J
L->9L
G->1F
A->4A
K->5K
B->3J
H->6H
E->7E
J->1J
D->4E
G->2G
J->6B
D->3D
E->6D
H->4F
I->4C
C->5I
F->0H
H->5G
K->7S
G->3H
L->5H
H->8J
A->3S
H->0B
B->1H
G->7L
K->8A
F->2J
F->7B
L->4G
F->4L
A->1K
B->0G
G->5J
L->3F
Abhängig davon, wie Sie es ausführen, wird "Ja" oder "Nein" ausgegeben.
Kein ernsthafter Eintrag, nur ein bisschen Spaß;)
BEARBEITEN:
Vielleicht sollte ich ein bisschen erklären.
EIN Grammatik ist eine Reihe von Regeln (Produktionen), die eine Sprache definieren . Eine Sprache kann als alle möglichen Folgen eines Alphabets betrachtet werden, die den Regeln ihrer Grammatik entsprechen.
Hier ist das Alphabet die Menge aller Dezimalstellen. Nach den Regeln der Grammatik müssen alle Zeichenfolgen Dezimalzahlen bilden, die durch 13 teilbar sind.
Wir können die obige Grammatik verwenden, um zu testen, ob eine Zeichenfolge zu unserer Sprache gehört.
Die Regeln der Grammatik enthalten terminale Symbole (die Elemente in der Sprache sind) sowie nicht terminale Symbole, die rekursiv ersetzt werden.
An einem Beispiel lässt sich leichter erklären, was los ist:
Nehmen wir zum Beispiel an, dass die Zeichenfolge, die wir testen, 71955 ist.
Es gibt immer ein Startsymbol (das nicht endständig ist), in der obigen Grammatik ist dies 'S'. Zu diesem Zeitpunkt haben wir keine Zeichen aus unserer Zeichenfolge gelesen:
current pattern symbol read
S ε
Nun lesen wir das erste Symbol in unserer Zeichenkette, das '7' ist, und suchen dann in der Grammatik nach einer Regel, die in unserem aktuellen Muster links neben dem '->' ein beliebiges Non-Terminal enthält hat unser Symbol auf der rechten Seite des "->". Zum Glück gibt es eine (S-> 7G), daher ersetzen wir die nicht-terminalen Symbole in unserem aktuellen Muster durch die rechte Seite der neuen Regel:
current pattern symbol read
7G 7
Jetzt haben wir das nicht-terminale 'G' in unserem Muster und das nächste zu lesende Symbol ist '1'. Deshalb suchen wir in unserer Grammatik nach einer Regel, die mit 'G-> 1 "beginnt. Wir finden, dass es eine gibt (G-> 1F), also ersetzen wir das Nicht-Terminal durch das RHS unserer neuen Regel:
current pattern symbol read
71F 1
Wiederholen Sie diesen Vorgang:
Nächste Regel: F-> 9D
current pattern symbol read
719D 9
Nächste Regel: D-> 5F
current pattern symbol read
7195F 5
Nächste Regel: F-> 5S
current pattern symbol read
71955S 5
Zu diesem Zeitpunkt haben wir keine Symbole mehr in unserer Zeichenfolge, aber wir haben ein anderes nicht-terminales Symbol darin. Wir sehen aus der ersten Regel in der Grammatik, dass wir 'S' durch die leere Zeichenkette (ε) ersetzen können: S-> ε
Auf diese Weise erhalten wir das aktuelle Muster: 71955ε, was 71955 entspricht.
Wir haben alle Symbole in unserer Zeichenfolge gelesen und das Muster enthält keine nicht-terminalen Symbole. Dies bedeutet, dass die Zeichenfolge zur Sprache gehört und daher 71955 tatsächlich durch 13 teilbar ist.
Dh das Ziel ist, pattern = string zu haben. Wenn Sie keine nicht-terminalen Symbole mehr haben, nachdem Sie alle Symbole in Ihrer Zeichenfolge gelesen haben, gehört die Zeichenfolge nicht zur Sprache. Wenn Ihre Zeichenfolge noch mehr zu lesende Symbole enthält, die Grammatik jedoch keine Regeln enthält, nach denen Sie fortfahren können, gehört die Zeichenfolge nicht zur Sprache.