studyklar
GdI 1 · Übungsblatt 4 · Aufgabe 2

Sieben E-Mail-Adressen gegen eine EBNF prüfen

Eine EBNF beschreibt, wie E-Mail-Adressen aussehen dürfen. Sieben Adressen werden dagegen geprüft, Stück für Stück. Rechts stehen die Regeln als Syntaxdiagramm; die Stelle, um die es gerade geht, ist hervorgehoben. Mit Weiter geht es Schritt für Schritt voran.

Die Aufgabe

Aufgabe 4.2

Für die Syntax von E-Mail-Adressen (address) liegt der folgende Vorschlag in EBNF vor. Hinweis: „[“ und „]“ bei dotnum bezeichnen die eckigen Klammern als Terminalsymbole.

EBNF für E-Mail-Adressen
address = <name> . <name> [ . <name> ] @ <domain>
name = <letter> { <symbol> }
letter = a | b | ... | z | A | B | ... | Z
symbol = <letter> | <digit>
digit = 0 | 1 | ... | 9
domain = <dotnum> | ( [ <subdomain> . ] <topleveldomain> )
dotnum = "[" <snum> . <snum> . <snum> . <snum> "]"
snum = 0 | 1 | ... | 255
subdomain = <name> [ - <name> ]
topleveldomain = com | edu | gov | org | <countrycodetld>
countrycodetld = aq | de | es | sy

Sind die folgenden Beispiele im Sinne der angegebenen Syntax zulässige E-Mail-Adressen? Geben Sie alle Fehler an, falls eine Adresse nicht zulässig ist.

AdresseZulässigNicht zulässig
iMr.President@WhiteHouse.gov☐☐
iiJames.T.Kirk@ncc-1701.org☐☐
iii2742@deep-space-nine.com☐☐
ivTeam.Stud@[131.246.161.19]☐☐
vuser@inter.net☐☐
viDP.Informatik1@[27.01.2006]☐☐
viialds@informatik.uni-kl.de☐☐

Gegeben ist eine EBNF für E-Mail-Adressen. Für jede der sieben Adressen ist zu entscheiden: Lässt sie sich mit diesen Regeln bilden? Wenn nicht, sind alle Fehler gesucht, nicht nur der erste.

Wichtig ist „im Sinne der angegebenen Syntax“. Es zählt nur die EBNF, nicht, ob es die Adresse in Wirklichkeit gibt. user@inter.net sieht echt aus und ist trotzdem falsch, wenn die Regeln sie nicht erzeugen.

Merke: Eine Adresse von links nach rechts zerlegen und jedes Stück der passenden Regel zuordnen. Bleibt ein Stück übrig oder fehlt eins, ist das ein Fehler.
  1. Die Regeln lesen: was vor dem @ stehen darf.
  2. Die Regeln lesen: was nach dem @ stehen darf.
  3. Die Adressen i bis vii einzeln zerlegen.

Vor dem @: zwei oder drei Namen mit Punkt

Wortein name?Grund
xjaein Buchstabe, danach null Zeichen
Ab3jaBuchstabe A, danach b und die Ziffer 3
3Dneinbeginnt mit einer Ziffer
a-bneinder Bindestrich ist kein symbol

Die Startregel ist die erste Regel: Sie beschreibt das Ganze, hier address. Alle anderen Regeln erklären nur ihre Teile. Vor dem @ stehen <name> . <name>, also mindestens zwei Namen mit einem Punkt dazwischen. Die eckigen Klammern erlauben einen dritten Namen. Ein einzelner Name ohne Punkt ist nicht vorgesehen.

Ein name beginnt mit einem Buchstaben (letter). Danach folgen beliebig viele Zeichen aus symbol: Buchstaben oder Ziffern. Sonst nichts: kein Bindestrich, kein Unterstrich, kein Punkt.

Aus Skript 3, Folie 3-33 („EBNF“): Nichtterminale stehen in spitzen Klammern <…> und werden durch eine eigene Regel erklärt. | trennt Alternativen, [ ] ist optional, { } heißt beliebig oft, auch null Mal.

Nach dem @: Zahlenadresse oder Namen mit Endung

StückRegelerlaubt
[10.0.0.1]dotnumvier Zahlen von 0 bis 255
mein-haussubdomainname - name, ein Bindestrich
mein-haus.de[subdomain .] topleveldomaineine subdomain, Punkt, Endung
orgtopleveldomainauch ohne subdomain davor

domain hat zwei Alternativen. Erstens dotnum: in eckigen Klammern genau vier Zahlen mit drei Punkten. Jede Zahl ist ein snum. Die Regel zählt die erlaubten Wörter auf: 0, 1, …, 255. Wir lesen sie wörtlich: Erlaubt ist genau ein Wort aus dieser Liste, also „1“, aber nicht „01“.

Achtung, eckige Klammern haben hier zwei Bedeutungen. Sonst heißt [ ] „optional“. In dotnum stehen sie in Anführungszeichen. Dann sind sie Terminalsymbole: Zeichen, die wörtlich in der Adresse stehen, wie @ oder der Punkt. Der Hinweis der Aufgabe sagt genau das.

Zweitens eine Endung (topleveldomain) mit höchstens einer subdomain und einem Punkt davor. Erlaubte Endungen sind nur com, edu, gov, org, aq, de, es und sy. Eine subdomain ist ein Name oder zwei Namen mit genau einem Bindestrich.

Noch 8 Schritte bis zum Ergebnis
Den ganzen Lösungsweg sehen Studierende und Lehrende der HS KL. Registriere dich mit deiner Adresse @stud.hs-kl.de oder @hs-kl.de, dann geht es hier direkt weiter.

Abbildung 1

addressname.name.name@domainnamelettersymbolsymbolletterdigitdomaindotnumsubdomain.topleveldomaindotnum[snum.snum.snum.snum]subdomainname-nametopleveldomaincomedugovorgcountrycodetldcountrycodetldaqdeessy
Legendegerade gemeintDie Regeln als Syntaxdiagramm. Ovale sind Zeichen, Rechtecke verweisen auf eine andere Regel; letter, digit und snum stehen nur als EBNF links.