EBNF

EBNF wird genutzt um eine Sprache (Menge aller Worte) zu definieren. Ein Wort ist eine valide Zeichenkette nach einer Menge an Regeln.

Es gibt immer eine Start Regel (letzte wenn nicht explizit) von der aus ersetzt wird.

Syntax

<left_hand_side> <= RHS

# Selection (exactly one is always chosen)
<lhs> <= E1 | E2 | E3

#  Option (doesn't have to be chosen)
<lhs> <= [ E1 ]

# Can be combined
<lhs> <= [ E1 | E2 ]
# Equivalent to
<lhs> <= E1 | E2 | \epsilon

# Repetition
<lhs> <= { E1 } # Can also be 0 times

Equivalence

Two EBNF rulesets are equal if they describe the same language.

Rekursion

Rekursion ist mächtiger um manche Probleme zu lösen, zum Beispiel ist mit Rekursion trivial: <AnB> <- [A <AnB> B].

Es ist immer eine Stopp-Möglichkeit nötig, wenn eine Rekursion verwendet wird.

Precedence

Sequence binds weaker than anything else.

Exercices

Show ”…” is a Valid String

You can use a derivation table in order to show the choices made to derive something in an EBNF ruleset.

You have the choice between a table and a tree. The tree is waaay more useful I think.

Create EBNF Rules for some kind of strings