Übungen
Klicke auf eine Aufgabenüberschrift, um die Aufgabe zu öffnen!
Welche Sprachen werden durch die abgebildeten Zustandsgraphen definiert? Finde erst einige Beispielwörter mit der angegebenen Länge, beschreibe dann die Sprache umgangssprachlich und gib zuletzt den passenden regulären Ausdruck ein!
| Nr. | Zustandsgraph | Beispielwörter | regulärer Ausdruck |
|---|---|---|---|
| A | ![]() |
Wortlänge 2: Wortlänge 4: Wortlänge 6: Wortlänge 8: |
|
| B | ![]() |
Wortlänge 2: Wortlänge 4: Wortlänge 6: Wortlänge 8: |
|
| C | ![]() |
Wortlänge 2: Wortlänge 4: Wortlänge 6: Wortlänge 8: |
|
| D | ![]() |
Wortlänge 2: Wortlänge 4: Wortlänge 6: Wortlänge 8: |
Python verwendet bei Gleitkommazahlen einen Punkt als Dezimaltrennzeichen, zum Beispiel in 1.0 oder 3.14.
Wir betrachten hier eine vereinfachte Sprache gemäß folgender Syntaxdiagramme: Erlaubt sind nur die Ziffern 0, 1 und 2, Vorzeichen und Exponenten werden nicht berücksichtigt. Vor und nach dem Punkt jeweils mindestens eine Ziffer stehen.
Kommazahl:
Ganzzahlteil:
Ziffer:
- Entscheide anhand der Syntaxdiagramme, welche der folgenden Wörter zur Sprache gehören. Begründe deine Entscheidungen:
121.011,0.0,12,.2,21.,1.0.2. - Untersuche mit dem untenstehenden Akzeptor deine Entscheidungen aus Teilaufgabe a. Beschreibe, welche Bedeutung Z4 hat.
- In Python darf der Ziffernteil vor oder nach dem Punkt fehlen:
.2steht für0.2und21.für21.0. Erweitere den Akzeptor aus Teilaufgabe b so, dass er auch diese beiden Schreibweisen akzeptiert. Mindestens eine Ziffer und genau ein Punkt müssen weiterhin vorkommen; ein einzelner Punkt darf nicht akzeptiert werden.
Erstelle einen Akzeptor, der Muh-Laute gemäß dem folgenden Syntaxdiagramm erkennt.
Formuliere hier zunächst den passenden regulären Ausdruck und teste
deinen Akzeptor am Schluss mit den aufgeführten Beispielen.
Erstelle einen Akzeptor, der Wörter erkennt, in denen die Bitfolge 001 vorkommt.
Formuliere hier zunächst den zum Syntaxdiagramm passenden regulären Ausdruck und teste
deinen Akzeptor am Schluss mit den aufgeführten Beispielen.
Erstelle Akzeptoren für die Sprache über dem Alphabet {a,b}, die wie folgt arbeiten:
- Nichts wird akzeptiert.
- Nur das leere Wort (Länge 0) wird akzeptiert.
- Alle Wörter werden akzeptiert.
Die folgende Automatentafel gehört zu einem Akzeptor mit Z = {Z0, Z1, Z2, Z3, Z4} und Ze = {Z3}. Erstelle in der Simulation den Akzeptor, teste ihn und gib im Anschluss die Sprache des Akzeptors als regulären Ausdruck an!
Regulärer Ausdruck:
Bei der Datenübertragung werden häufig Prüfbits eingesetzt. Ein einfaches Verfahren hierbei ist das Paritätsbit. Bei diesem Verfahren wird nach einer bestimmten Zahl von Datenbits ein Bit angehängt, um z.B. die Anzahl der Einsen gerade zu machen.
In dieser Aufgabe soll nach drei Datenbits immer viertes Bit als Prüfbit angehängt sein. An die Bitfolge "001" (ungerade Anzahl 1er) würde eine "1" angehängt und an die Bitfolge "110" (gerade Anzahl 1-er) eine "0".
Beispiele: 0000, 1100, 11110011, 101000111001.
Gegenbeispiele: 1110, 0001, 111100001110, 110.
Erstelle einen Akzeptor, der eine Bitfolge einliest und nur dann akzeptiert, wenn alle Prüfbits korrekt sind (und die Folge mit einem Prüfbit endet).
Erstelle einen Akzeptor für E-Mail-Adressen. Die Adressen sollen nach folgendem regulären Ausdruck aufgebaut sein:
b+(.b+)*@b+.bbb?
Ein Akzeptor soll vereinfachte Turtle-Anweisungen erkennen. Erlaubt sind die Befehle fd und bk, gefolgt von mindestens einem Trennzeichen und einer ganzen Zahl. Die Zahl darf ein Minuszeichen enthalten und besteht aus mindestens einer der Ziffern 0, 1 und 2.
Damit die Trennzeichen eindeutig sichtbar sind, verwenden wir anstelle von Leerzeichen das Gleichheitszeichen =. Die folgenden Syntaxdiagramme legen die Sprache fest:
Turtleanweisung:
WS:
Zahl:
Ziffer:
- Gib ein geeignetes Alphabet an. Finde jeweils drei gültige und drei ungültige Anweisungen und begründe deine Auswahl anhand der Syntaxdiagramme.
- Entwickle im Simulator einen Akzeptor, der genau diese Sprache erkennt. Verwende die einzelnen Zeichen der Anweisungen als Eingabezeichen.
- Teste deinen Akzeptor mit deinen Beispielen aus a und mit
fd=12,bk==-20,fd12,fd=,bk=-,fd=1=2undfd==--1. Halte jeweils das erwartete und das beobachtete Ergebnis fest. Begründe anhand deines Akzeptors, weshalb das Trennzeichen mindestens einmal, das Minuszeichen höchstens einmal und eine Ziffer mindestens einmal vorkommen muss.



