# EBNF Aufgabe



## prog1 (20. Okt 2014)

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 (20. Okt 2014)

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.



prog1 hat gesagt.:


> 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.



prog1 hat gesagt.:


> 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)



prog1 hat gesagt.:


> 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.



prog1 hat gesagt.:


> 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.


----------



## prog1 (20. Okt 2014)

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 (20. Okt 2014)

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.


----------



## Thallius (20. Okt 2014)

Joose hat gesagt.:


> 2. Der erste und der zweite Buchstabe ist entweder a oder b.
> 
> WordBeginA := LetterA, LetterA
> WordBeginB := LetterB, LetterB
> ...



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 (20. Okt 2014)

Thallius hat gesagt.:


> 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}


----------



## arilou (20. Okt 2014)

a) Was hat das mit Java zu tun?
b) Wofür wird wohl die Rubrik "Hausaufgaben" dieses Forums da sein, na?


----------



## Thallius (20. Okt 2014)

arilou hat gesagt.:


> a) Was hat das mit Java zu tun?
> b) Wofür wird wohl die Rubrik "Hausaufgaben" dieses Forums da sein, na?



Was willst Du uns damit sagen?


----------

