Eine Grammatik für vereinfachte E-Mail-Adressen

Eine Schreibweise für Syntaxdiagramme

Im letzten Abschnitt wurde die Sprache der vereinfachter E-Mail-Adressen mit Hilfe von Syntaxdiagrammen präzise festgelegt.

Syntaxdiagramme legen Ersetzungsregeln fest. Diese Ersetzungsregeln kann man - wie in der folgenden Übersicht zu sehen - textuell darstellen.

Syntaxdiagramm Ersetzungsregeln

Emailadresse:

Syntaxdiagramm
Emailadresse ::= User '@' Domain

User:

Syntaxdiagramm
User ::= Name

Domain:

Syntaxdiagramm
Domain ::= Subdomains Topleveldomain

Subdomains:

Syntaxdiagramm
Subdomains ::= (Name '.')+

Topleveldomain:

Syntaxdiagramm
Topleveldomain ::= 'b' 'b'

Name:

Syntaxdiagramm
Name ::= Buchstabe+

Buchstabe:

Syntaxdiagramm
Buchstabe ::= 'b'

Du kannst das selbst mit dem Railroad Diagram Generator ausprobieren.

Aufgabe 1

(a) Gib im Feld [Edit Grammar] die "Grammatik" der festzulegenden Sprache in der folgenden Darstellung ein.

Emailadresse ::= User '@' Domain
User ::= Name
Domain ::= Subdomains Topleveldomain
Subdomains ::= (Name '.')+
Topleveldomain ::= 'b' 'b'
Name ::= Buchstabe+
Buchstabe ::= 'b'

Aktiviere anschließend [View Grammar].

(b) Teste auch die folgende Variante vereinfachter E-Mail-Adressen. Hier sind auch User-Namen mit Anführungszeichen erlaubt.

Emailadresse ::= User '@' Domain
User ::= Name | AName
Domain ::= Subdomains Topleveldomain
Subdomains ::= (Name '.')+
Topleveldomain ::= 'b' 'b'
Name ::= Buchstabe+
AName ::= '"' (Buchstabe | Leerzeichen)* '"'
Buchstabe ::= 'b'
Leerzeichen ::= ' '

(c) Hier eine Version zur Beschreibung vereinfachter E-Mail-Adressen, die sich an die Beschreibung in der RFC 822 anlehnt. Kannst du - ohne es vorher mit dem Railroad Diagram Generator auszuprobieren - die zugehörigen Syntaxdiagramme konstruieren? Überprüfe deinen Vorschlag.

AddrSpec ::= LocalPart '@' Domain
LocalPart ::= Word ("." Word)*
Word ::= Atom | QuotedString
Atom ::= Buchstabe+
QuotedString ::= '"' (Buchstabe | Leerzeichen)* '"'
Domain ::= SubDomain ("." SubDomain)*
SubDomain ::= Buchstabe+
Buchstabe ::= 'b'
Leerzeichen ::= ' '

(d) Kannst du anhand dieser Beispiele (und weiterer Experimente) erschließen, was die Symbole "+", "*" und "|" hier bewirken?

Eine vereinfachte Darstellung der Ersetzungsregeln

Ersetzungsregeln in der oben gezeigten Darstellung sind für praktische Zwecke günstig, da sie z.B. direkt in Syntaxdiagramme umgewandelt werden können.

Für viele eher theoretische Fragestellungen benutzt man eine elementarere Darstellung der Ersetzungsregeln. Die folgende Übersicht zeigt diese vereinfachte Version von Ersetzungsregeln.

Syntaxdiagramm Ersetzungsregeln (elementar)

Emailadresse:

Syntaxdiagramm
(1) Emailadresse -> User @ Domain

User:

Syntaxdiagramm
(2) User -> Name

Domain:

Syntaxdiagramm
(3) Domain -> Subdomains Topleveldomain

Subdomains:

Syntaxdiagramm
(4) Subdomains -> Name .
(5) Subdomains -> Name . Subdomains

Topleveldomain:

Syntaxdiagramm
(6) Topleveldomain -> b b

Name:

Syntaxdiagramm
(7) Name -> Buchstabe
(8) Name -> Buchstabe Name

Buchstabe:

Syntaxdiagramm
(9) Buchstabe -> b

Die Ersetzungsregeln sind hier zusätzlich durchnummeriert. Beachte, dass zur Beschreibung von Syntaxdiagrammen mit Verzeigungen mehrere Ersetzungsregeln benutzt werden. Beachte auch, dass iterierte Wege mit Hilfe rekursiver Ersetzungsregeln beschrieben werden.

Die Ableitung einer E-Mail-Adresse kann man jetzt wie folgt mit Ersetzungsvorgängen beschreiben.

Emailadresse ->                                                # (1)
User @ Domain ->                                               # (2)
Name @ Domain ->                                               # (8)
Buchstabe Name @ Domain ->                                     # (9)
b Name @ Domain ->                                             # (7)
b Buchstabe @ Domain ->                                        # (9)
b b @ Domain ->                                                # (3)
b b @ Subdomains Topleveldomain ->                             # (5)
b b @ Name . Subdomains Topleveldomain ->                      # (7)
b b @ Buchstabe . Subdomains Topleveldomain ->                 # (9)
b b @ b . Subdomains Topleveldomain ->                         # (4)
b b @ b . Name . Topleveldomain ->                             # (8)
b b @ b . Buchstabe Name . Topleveldomain ->                   # (9)
b b @ b . b Name . Topleveldomain ->                           # (8)
b b @ b . b Buchstabe Name . Topleveldomain ->                 # (9)
b b @ b . b b Name . Topleveldomain ->                         # (7)
b b @ b . b b Buchstabe . Topleveldomain ->                    # (9)
b b @ b . b b b . Topleveldomain ->                            # (6)
b b @ b . b b b . b b

Aufgabe 2

(a) Entwickle analog eine Ableitung zur Zeichenkette bbb@bb.bb.

(b) Warum kann man keine Ableitung zur Zeichenkette bbb@bb erzeugen?

X

Fehler melden

X

Suche