EBNF Aufgabe

prog1

Mitglied
Hallo,

ich habe hier eine Aufgabe die ich anhand EBNF Regeln lösen soll. Wäre nett, wenn ihr mir ein Feedback geben könnt, ob es richtig oder falsch ist.

Aufgabe:
1. Ein Wort hat mindestens einen Buchstaben.
2. Der erste und der zweite Buchstabe ist entweder a oder b.
3. Hat das Wort mehr als zwei Buchstaben, so steht entweder an der 3. bis 5. Stelle ein a oder an der dritten und vierten Stelle ein b.
4. Nach dem mit Regel 3. beschriebenen Wortteil folgen mindestens zwei
beliebige weitere Buchstaben.
5. Die Länge der Worte der Sprache ist nicht begrenzt.

Lösung:
1. Wort => (“a“|“b“)+
2. Wort => (“a“ “a“)|(“b“ “b“)
3. Wort =>((“a“ “a“)|(“a“ “b“)|(“b“ “b“)|(“b“ “a“)) ((“a“ “a“ “a“)|(“b“ “b“))
4. Wort => ((“a“ “a“)|(“a“ “b“)|(“b“ “b“)|(“b“ “a“)) ((“a“ “a“ “a“)|(“b“ “b“)) (“a“|“b“) (“a“|“b“)+
5. Sprache => (“a“|“b“)*

Danke
 

Joose

Top Contributor
Mir würde hier eine Produktionsregel für A, B und Buchstaben fehlen.
Damit vereinfachst du unter anderem den Teil mit "beliebige weitere Buchstaben".

Bitte kontrolliere nochmal wie die EBNF geschrieben wird. "=>" ist falsch!

Es lässt sich ein Ansatz erkennen :) aber du solltest auf alle Fälle nochmal drüberschauen und ein paar Verbesserungen vornehmen.

1. Ein Wort hat mindestens einen Buchstaben.
1. Wort => (“a“|“b“)+

Falsch! "+" gibt es in dieser Form nicht, schau nochmal nach wie Wiederholungen abgebildet werden.

2. Der erste und der zweite Buchstabe ist entweder a oder b.
2. Wort => (“a“ “a“)|(“b“ “b“)

Richtig (abgesehen von den Fehler die davor schon bemängelt wurden)

3. Hat das Wort mehr als zwei Buchstaben, so steht entweder an der 3. bis 5. Stelle ein a oder an der dritten und vierten Stelle ein b.
3. Wort =>((“a“ “a“)|(“a“ “b“)|(“b“ “b“)|(“b“ “a“)) ((“a“ “a“ “a“)|(“b“ “b“))

Falsch! Wie bei 2. festgelgt kann ein Wort nur mit "aa" oder "bb" beginnen.

5. Die Länge der Worte der Sprache ist nicht begrenzt.
5. Sprache => (“a“|“b“)*

Falsch! Du definierst hier die Produktionsregel "Sprache" es geht aber um die Länge der Wörter.
 
Zuletzt bearbeitet:

prog1

Mitglied
Hi,

danke für deine schnelle Antwort.
In der Aufgabenstellung wurde bei uns explizit gefordert, nur mit den Terminalsymbolen a,b die Sprache zu definieren. Und das “+“ ist bei uns als Metasymbol der EBNF definiert und steht für einmal- oder mehrmaliger Aufruf.

Also ich würde jetzt das hier vorschlagen:

1. (“a“|“b“)+
2. (“a“ “a“)|(“b“ “b“)
3. (“a“ “a“)|(“b“ “b“) ((“a“ “a“ “a“)|(“b“ “b“))
4. (“a“ “a“)|(“b“ “b“) ((“a“ “a“ “a“)|(“b“ “b“)) “a“|“b“ (“a“|“b“)* -> würde hier bestimmt noch einfacher gehen, aber finde hier leider nichts passendes was wir in der Vorlesung durch genommen haben.
5. ((“a“ “a“)|(“b“ “b“) ((“a“ “a“ “a“)|(“b“ “b“)) “a“|“b“ (“a“|“b“)*)*

Danke
 

Joose

Top Contributor
Wie schon gesagt würde ich folgende Sachen noch definieren:

LetterA := "a"
LetterB := "b"
Letters := LetterA | LetterB

1. Ein Wort hat mindestens einen Buchstaben.

Word := Letters, {Letters}

2. Der erste und der zweite Buchstabe ist entweder a oder b.

WordBeginA := LetterA, LetterA
WordBeginB := LetterB, LetterB

Word := WordBeginA, WordBeginB

Möglicherweise helfen dir ein paar Hilfsproduktionsregeln weiter :)
Deine Sachen sind doch auch richtig, aber man solte versuchen die Sachen soweit wie möglich zu vereinfachen etc.
 
Zuletzt bearbeitet:

Thallius

Top Contributor
2. Der erste und der zweite Buchstabe ist entweder a oder b.

WordBeginA := LetterA, LetterA
WordBeginB := LetterB, LetterB

Word := WordBeginA, WordBeginB

Ich glaube das hast du falsch verstanden. Da steht nicht die ersten beiden Buchstaben müssen aa oder bb sein, sondern der erste und der zweite ist entweder a oder b. Also sind die möglichen Kombinationen

aa
ab
ba
bb

Damit wohl eher

Word := (LetterA | LetterB), (LetterA | LetterB), {Letter}

Gruß

Claus
 

Joose

Top Contributor
Ich glaube das hast du falsch verstanden. Da steht nicht die ersten beiden Buchstaben müssen aa oder bb sein, sondern der erste und der zweite ist entweder a oder b.

Klar meine 1.Interpretation der Aussage war das 1. und 2.Buchstabe gleich sein müssen.
Wenn sie unterschiedlich sein dürfen/sollen hier die Anpassungen:

LettersAB := LetterA | LetterB
Letters := LettersAB | ...... (weitere Buchstaben bzw. Zeichen)

Word := LettersAB , LettersAB , {Letters}
 
Zuletzt bearbeitet:

Neue Themen


Oben