Autor Beitrag
Marco D.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2750

Windows Vista
Delphi 7, Delphi 2005 PE, PHP 4 + 5 (Notepad++), Java (Eclipse), XML, XML Schema, ABAP, ABAP OO
BeitragVerfasst: Fr 16.11.07 10:29 
Im Informatikunterricht Klasse 12 am Gymnasium setzen wir uns in diesem Kurshalbjahr mit der Theoretischen Informatik auseinander.
Laut Unterrichtsmaterial gibt es verschiedene Typen von Grammatiken (Typ 0 bis Typ 3).
Die Erklärung zu Typ 1 (kontextsensitiv) lautet:

Eine Grammatik ist vom Typ 1, wenn gegenüber Typ 0 für alle Regeln u -> v gilt: die Worte auf der rechten Seite einer Regel sind mindestens so lang wie die auf der linken Seite.

Aber woran mache ich die Länge der Worte einer Regel auf einer bestimmten Seite fest?
Wenn ich z.B. die Regel:

ZIFFER -> 1|2|3

habe, was ist dann die Länge der Worte z.B. auf der linken Seite?

Könnt ihr außerdem mal ein einfaches Beispiel für eine Grammatik vom Typ 1 geben?

_________________
Pascal keeps your hand tied. C gives you enough rope to hang yourself. C++ gives you enough rope to shoot yourself in the foot
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Fr 16.11.07 11:12 
Die Regel ZIFFER -> 1|2|3 sind ja eigentlich drei Regeln. Das (nichtterminale) Symbol ZIFFER kann überführt werden in eines der (terminalen) Symbole 1, 2 oder 3. Die Länge des Wortes auf der rechten Seite wäre also 1, wenn man ZIFFER als ein Symbol betrachtet, wäre es also eine kontextfreie (Typ 2) Regel, und sogar regulär (Typ 3).

Was in einer Typ 1-Grammatik nicht geht, wäre z.B. sowas: aSa -> cc. Hier stehen auf der linken Seite drei Symbole, auf der rechten aber nur zwei. Eine Regel der Form aSa -> bccb wäre regelkonform für eine Typ1-Grammatik. Daher heißen die Dinger auch "nicht verkürzend". Wenn man ein Wort aufbaut, wird es mit der Zeit immer länger, und wird zwischendurch nicht wieder kürzer.

Ne einfache Typ-1-Granmmatik?

S -> aSa | bSb | d
aSa -> edde

Kann man auch in eine kontextfreie Grammatik umbauen, muss man aber nicht :mrgreen:

_________________
We are, we were and will not be.
Marco D. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2750

Windows Vista
Delphi 7, Delphi 2005 PE, PHP 4 + 5 (Notepad++), Java (Eclipse), XML, XML Schema, ABAP, ABAP OO
BeitragVerfasst: Mo 26.11.07 21:59 
Hallo Gausi,

bis jetzt war eine Rückmeldung meinerseits in diesem Thread nicht möglich. :P
Danke für deine Erläuterungen. So richtig verstanden habe ich es immer noch nicht. ;)
Du hast ein Bsp. für eine Grammatik vom Typ 1 gepostet. Danke dafür erstmal.
Es wäre schön, wenn du zu jeder in dieser Grammatik enthaltenen Regel die Anzahl der Worte auf der linken und auch auf der rechten Seite nennen könntest, damit ich klar nachvollziehen kann, warum sie nun vom Typ 1 ist.

Danke im Voraus!

MfG =)

_________________
Pascal keeps your hand tied. C gives you enough rope to hang yourself. C++ gives you enough rope to shoot yourself in the foot
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Di 27.11.07 11:58 
Ich fang mal von vorne an ;-).

Eine Grammatik in diesem Sinne ist ja definiert als ein 4-Tupel (N, T, S, P). Dabei ist N eine Menge von nichtterminalen Symbolen, T die Menge der Terminalen Symbole, S ein Element aus N, das "Startsymbol" und P eine Menge von Ableitungsregeln. Ein Wort w gehört zur Sprache, die durch diese Grammatik erzeugt wird, wenn es eine Abfolge von Regeln gibt mit S ->* w und w enthält nur Zeichen aus T.

Oft (wenn es nur um das Prinzip geht) werden terminale Symbole mit Kleinbuchstaben, Nichterminale mit Großbuchstaben gekennzeichnet. Bei konkreten Beispielen hat man aber auch Nichterminale Symbole wie ZIFFER, ZAHL, AUSDRUCK, und als terminale Symbole z.B. (,),*,+,-,:,0,1,2,3,4,5,6,7,8,9,. Man könnte auch ein Symbol LECKERER_APFELKUCHEN_NACH_OMAS_ALTEM_HAUSREZEPT definieren - auch wenn das ziemlich lang aussieht, wäre das dann nur ein Symbol ;-).

Die Ableitungsregeln sind nun von der Form (N+T)* -> (N+T)*, d.h. durch die Anwendung der Regel wird eine Zeichenkombination aus terminalen und nichtterminalen Symbolen durch eine andere Kombination dieser Zeichen ersetzt. In der Chomsky-Hierarchie werden nun Einschränkungen definiert, wie diese Regeln aussehen dürfen.

Die Anzahl der Worte ist bei jeder Regel bei jedem Typ gleich: links eins, und rechts eins. Den Unterschied machen die Anzahl der Symbole in diesen beiden Worten aus.

Typ-1-Grammatiken dürfen nur Regeln enthalten, bei denen die zu ersetzende Zeichenkombination nicht länger ist als die ersetzende. D.h., durch die Anwendung einer Regel wird ein "unfertiges Wort" nicht kürzer.

Meine kleine Grammatik von eben hat ein Nichtterminales Symbol S, was auch das Startsymbol ist, vier Terminale Symbol a,b,d,e und vier Ableitungsregeln S -> aSa, S-> bSb, S-> d und aSa -> edde (oben habe ich eine verkürzende Schreibweise benutzt ;-)). Bei den ersten drei Regeln steht auf der linken Seite nur ein Symbol (das S), und rechts drei oder ein Symbol. Bei der vierten Regel stehen links drei Symbole, und rechts vier. Damit ist die Bedingung für Typ-1-Grammatiken erfüllt. (Laut Wikipedia muss zusätzlich gelten, dass links mindestens ein Symbol aus N stehen muss. Das halte ich aber nur für bedingt sinnvoll, da man (glaube ich) jede Grammatik so umschreiben kann, dass in jeder Regel links nur Symbole aus N stehen. :nixweiss:)

Die Sprache, die diese Grammatik definiert sind Palindrome aus den Zeichen a und b, deren Mitte markiert ist mit d (falls die Länge ungerade ist) oder mit aeddea (falls die Länge gerade ist).

_________________
We are, we were and will not be.