Formale Sprachen Informatik EBNF đBitte um Hilfe?
Die folgende Grammatik einer Programmiersprache ist in EBNF gegeben:
Ăbertragen Sie diese Grammatik in die klassische Grammatiknotation. Nehmen Sie verstĂ€ndliche Namen fĂŒr die Nonterminalsymbole.
Hey Leute, könnt ihr mir bei diesem Ăbungsbeispiel helfen?
Was genau ist denn das Problem?
Ja ich verstehe nicht wie das ganze ĂŒberhaupt geht :(
1 Antwort
Ich gehe mal davon aus, dass Du mit formaler Grammatik und der Notation ihrer Produktionsregeln vertraut bist.
EBNF wurde entwickelt, um solche Regeln kompakter und verstÀndlicher zu formulieren, ohne die Exaktheit zu beeintrÀchtigen. Neue Elemente sind z. B.:
- { X }: beliebige Wiederholung von X
- [ X ]: optionales X
- X | Y: entweder X oder Y
Um eine EBNF in klassische Regeln zu konvertieren, musst Du diese Konstrukte ĂŒber Hilfsregeln abbilden. Das geht weitgehend nach Schema F:
Aus L = { X } wird:
- L â đ
- L â L X
Aus L = [ X ] wird:
- L â đ
- L â X
Aus L = X | Y wird:
- L â X
- L â Y
Bei Deiner EBNF wird es sinnvoll sein, Nichtterminale fĂŒr {Stat}, die drei Alternativen von Stat, sowie fĂŒr {"ELSEIF" ...} einzufĂŒhren. Als âverstĂ€ndliche Namenâ wĂŒrde ich persönlich âblock-statementâ, âstatement-listâ, âif-statementâ, âfor-statementâ und âelif-phraseâ wĂ€hlen (und âStatâ/âExprâ durch âstatementâ/âexpressionâ ersetzen).
Die Lösung wird dann so anfangen:
- statement â block-statement
- statement â if-statement
- statement â for-statement
- block-statement â "BEGIN" statement-list "END"
- statement-list â đ
- statement-list â statement-list statement
- if-statement â ...
- for-statement â ...
Bei den letzten beiden will ich Dir den Spaà nicht nehmen, es selbst zu lösen.