| Autor |
Gegebene Grammatik in CNF umformen |
|
fallenhero
Aktiv  Dabei seit: 11.12.2010 Mitteilungen: 230
Aus:
 |     Themenstart: 2012-08-04 17:55
|
 
Hallo, ich wollte Fragen ob ich folgende Grammatik richtig in CNF umgeformt habe. Gegeben: G=({a,b}, {A,B,S}, R, S) mit R: S->ASB \or\ \epsilon A->bS B->Sa In CNF: S'->S \or\ \epsilon S->CB A->DS B->SE C->AS D->b E->a Kann ich das so lassen oder ist es falsch?
|
Profil
Quote
Link |
gmkwo
Aktiv  Dabei seit: 07.05.2005 Mitteilungen: 476
Aus: Berlin
 |     Beitrag No.1, eingetragen 2012-08-05 19:23
|
Hallo,
also die Grammatik die du angibst ist in CNF (S' ist das neue Startsymbol nehme ich an).
Aber probiere mal irgendein Wort mit deiner Grammatik abzuleiten. Achte dabei auf die Anzahl der S in den Wörtern..
stephan
----------------- In these days the angel of topology and the devil of abstract algebra fight for the soul of every individual discipline of mathematics.. Herman Weyl
|
Profil
Quote
Link |
fallenhero
Aktiv  Dabei seit: 11.12.2010 Mitteilungen: 230
Aus:
 |     Beitrag No.2, vom Themenstarter, eingetragen 2012-08-16 19:14
|
Du hast recht, ich werd das S nie wieder los... wie könnte ich das geschickt lösen? :S
|
Profil
Quote
Link |
TheBear
Senior  Dabei seit: 31.01.2006 Mitteilungen: 1222
Aus:
 |     Beitrag No.3, eingetragen 2012-08-16 20:59
|
Moin,
versuch mal, in deiner Originalgrammatik als allererstes sämtliche Produktionen der Form "A -> epsilon" rauszukriegen, dann solltest du weiterkommen.
Gruß TheBear
----------------- Die “Arbeit” ist ihrem Wesen nach die unfreie, unmenschliche, ungesellschaftliche Tätigkeit.
|
Profil
Quote
Link |
fallenhero
Aktiv  Dabei seit: 11.12.2010 Mitteilungen: 230
Aus:
 |     Beitrag No.4, vom Themenstarter, eingetragen 2012-08-16 21:26
|
Hi,
wenn ich dich richtig verstanden habe, würde ich folgendes machen um das Epsilon zu eliminieren:
Ich definiere ein neues Startsymbol S'
 
\ S' -> S | epsilon S->ASB A->bS B->Sa
Das wäre doch quasi der erste Schritt oder?
[ Nachricht wurde editiert von fallenhero am 16.08.2012 21:26:16 ]
|
Profil
Quote
Link |
gmkwo
Aktiv  Dabei seit: 07.05.2005 Mitteilungen: 476
Aus: Berlin
 |     Beitrag No.5, eingetragen 2012-08-17 11:42
|
Ja genau, jetzt musst du die restlichen drei Regeln ändern. ZB wie in dieser Anleitung:
Wikipedia-CNF
Du kannst dir das aber auch selbst überlegen.. Dann hast du ein gutes Verständnis über die Chomsky-NF.
----------------- In these days the angel of topology and the devil of abstract algebra fight for the soul of every individual discipline of mathematics.. Herman Weyl
|
Profil
Quote
Link |
fallenhero
Aktiv  Dabei seit: 11.12.2010 Mitteilungen: 230
Aus:
 |     Beitrag No.6, vom Themenstarter, eingetragen 2012-08-17 13:05
|
Okay die restlichen Regeln sollten dann ja so aussehen:
 
S' -> S \or\ epsilon S->ASB A->bS B->Sa --------------- S' -> S \or\ epsilon S -> C_1 B A->C_b S B->S C_a C_1 -> AS C_b -> b C_a -> a Das ist jetzt zwar in CNF , allerdings bekomme ich nach wie vor bei der Bildung eines Wortes das S nicht weg. Davor konnte ich ja ein S mittels Epsilon ersetzen. Ich finde dazu auch keine Lösung im Wikipedia (oder ich war zu blöd und habs nicht verstanden)
|
Profil
Quote
Link |
Calculus
Senior  Dabei seit: 10.08.2012 Mitteilungen: 2668
Aus:
 |     Beitrag No.7, eingetragen 2012-08-17 13:09
|
Schau dir im Wikipedia-Artikel mal den 4. Punkt an, dort wird erklärt wie du die Epsilon-Produktionen entfernen kannst.
|
Profil
Quote
Link |
gmkwo
Aktiv  Dabei seit: 07.05.2005 Mitteilungen: 476
Aus: Berlin
 |     Beitrag No.8, eingetragen 2012-08-17 13:45
|
Naja, sowas wie
ist ja verboten, aber du kannst ja jedes durch ersetzen. Du musst dir also überlegen wie du in CNF bekommst. Mit ein paar neuen Symbolen sollte das einfach sein.
----------------- In these days the angel of topology and the devil of abstract algebra fight for the soul of every individual discipline of mathematics.. Herman Weyl
|
Profil
Quote
Link |
fallenhero
Aktiv  Dabei seit: 11.12.2010 Mitteilungen: 230
Aus:
 |     Beitrag No.9, vom Themenstarter, eingetragen 2012-08-18 10:08
|
 
\ S-> ab in CNF wäre ja : S -> C_a C_b C_a -> a C_b -> b Ich verstehe allerdings nicht, wieso du S->ab gewählt hast. Wie kommst du denn darauf? Wenn ich S->ASB ableite, dann wäre ja quasi mein kleinstes entstehendes wort S->ba. Ich habe mir den Wikipedia Artikel durchgelesen, werde daraus allerdings nicht schlau.
[ Nachricht wurde editiert von fallenhero am 18.08.2012 10:10:11 ]
|
Profil
Quote
Link |
TheBear
Senior  Dabei seit: 31.01.2006 Mitteilungen: 1222
Aus:
 |     Beitrag No.10, eingetragen 2012-08-18 10:24
|
Profil
Quote
Link |
fallenhero
Aktiv  Dabei seit: 11.12.2010 Mitteilungen: 230
Aus:
 |     Beitrag No.11, vom Themenstarter, eingetragen 2012-08-18 10:53
|
Okay Bear, ich versuche mal deine Anleitung umzusetzen (kann ja nicht so schwer sein xD)
Letzter Schritt aus Beitrag 6 mit der zusätzlichen Regel S->epsilon:
 
\ S -> C_1 B \or\ epsilon A->C_b S B->S C_a C_1 -> AS C_b -> b C_a -> a ------------------------------------------ Entfernung der Epsilon Regel : S' -> S \or\ epsilon S -> C_1 B A->C_b S B->S C_a C_1 -> AS C_b -> b C_a -> a Musterlösung sagt allerdings was anderes... intuitiv würde ich aber sagen, es gibt mehr als eine Lösung von daher poste ich es einfach mal. Bestimmt falsch gemacht :D
[ Nachricht wurde editiert von fallenhero am 18.08.2012 10:54:35 ]
|
Profil
Quote
Link |
TheBear
Senior  Dabei seit: 31.01.2006 Mitteilungen: 1222
Aus:
 |     Beitrag No.12, eingetragen 2012-08-18 11:08
|
Jop, da ist nen Fehler drin:
 
Die Grammatik aus #6 mit S -> eps drin sieht so aus: S' -> S \or \epsilon S -> C_1 B \or \epsilon A->C_b S B->S C_a C_1 -> AS C_b -> b C_a -> a -------------------------------- Bei Eliminieren von S -> \epsilon wird jedes Vorkommen von S \(ausser in S' -> S, das ist eine Sonderregel\) einmal durch \epsilon ersetzt und die entstehende Regel zusätzlich eingefügt. Danach kann S -> \epsilon raus. Du kriegst S' -> S \or \epsilon S -> C_1 B \(S -> \epsilon weg\) A->C_b S B->S C_a C_1 -> AS C_b -> b C_a -> a und zusätzlich A -> C_b B -> C_a C_1 -> A.
Die entstandene Grammatik ist natürlich noch nicht in CNF, da fehlt noch ein Schritt.
Gruß TheBear
|
Profil
Quote
Link |
gmkwo
Aktiv  Dabei seit: 07.05.2005 Mitteilungen: 476
Aus: Berlin
 |     Beitrag No.13, eingetragen 2012-08-18 14:11
|
Ja, ich meinte natürlich
----------------- In these days the angel of topology and the devil of abstract algebra fight for the soul of every individual discipline of mathematics.. Herman Weyl
|
Profil
Quote
Link |
fallenhero
Aktiv  Dabei seit: 11.12.2010 Mitteilungen: 230
Aus:
 |     Beitrag No.14, vom Themenstarter, eingetragen 2012-08-18 14:36
|
 
\ Jetzt hab ich's bis dahin aufjedenfall verstanden. Danke für das anschauliche Beispiel! Letzter Schritt wäre doch Kettenregeln entfernen. Offensichtlich haben wir folgende Kettenregeln : A->C_b B->C_a C_1 -> A Laut Wiki muss ich diese ersetzen nach dem Motto : A->B und B->w . Dann packe A->w rein. D.h. A->C_b wird ersetzt durch : A->b { da C_b -> b. Die Indizes haben endlich einen Sinn :D B->C_a wird ersetzt durch: B->a C_1->A wird ersetzt durch: C_1 -> C_b S CNF: S' -> S \or \epsilon S -> C_1 B A->C_b S \or \ b B->S C_a \or \ a C_1 -> AS \or \ C_b S C_b -> b C_a -> a
[Die Antwort wurde nach Beitrag No.12 begonnen.]
|
Profil
Quote
Link |