finished the second and third task

This commit is contained in:
2025-10-11 16:21:45 +02:00
parent 3d9d9a8859
commit 2fe8b52985
4 changed files with 1708 additions and 1 deletions

BIN
index.pdf

Binary file not shown.

View File

@@ -10,7 +10,7 @@
= Exercise 01
#let question(body) = block(
fill: luma(240),
fill: luma(255),
inset: 8pt,
radius: 4pt
)[
@@ -139,4 +139,69 @@ We have the following Recursion:
- AsignOp: { ";" }
- CondTerm: { "&&", Follow(CondTerm) } = { "&&", CondFact }
== 02 Konstruktion einer Grammatik
#question[
Geben Sie eine EBNF-Grammatik an, die folgende Beschreibung abdeckt. Es handelt sich dabei um eine fiktive
Schachnotation. Bilden Sie dabei beliebig viele Non-Terminalklassen, mindestens jedoch eine für jedes fett
geschriebene Wort.
Ein Spiel setzt sich aus mindestens einem Zug zusammen, wobei Züge durch Beistriche (“,”) getrennt sind.
Nach dem letzten Zug steht ein Strichpunkt (“;”).
Ein Zug beginnt mit einer Figur, gefolgt von einer Position (Startposition). Darauf folgt ein Bindestrich (“-”),
gefolgt von einer weiteren Position (Zielposition). Sollte durch den Zug eine Figur geschlagen worden sein,
folgt ein “x”. Unabhängig davon, ob eine Figur geschlagen wurde, folgt gegebenenfalls die Information, ob der
Gegner Schach ( + ) oder Schach-Matt ( \# ) steht. Ein Spieler kann nicht gleichzeitig Schach und Schach-Matt
stehen.
Beispielzüge: Ka1-a2, Qf5-h7x\#, Pb2-c3x, Rh1-h6+, Bb5-d7x+
Eine Figur ist entweder ein König (“K”), eine Königin (“Q”), ein Turm (“R”), ein Läufer (“B”), ein Springer
(“N”), oder ein Bauer (“P”).
Eine Position ist eine Spalte, gefolgt von einer Zeile.
Eine Spalte ist ein Buchstabe zwischen a und h (a, b, c, d, e, f, g, h).
Eine Zeile ist eine Zahl zwischen 1 und 8 (1, 2, 3, 4, 5, 6, 7, 8).
]
```ebnf
Game = Turn { "," Turn} ";".
Turn = Character Position "-" Position ["x"] ["+" | "#"].
Character = “K” | “Q” | “R” | “B” | “N” | “P”.
Position = Column Row.
Column = "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h".
Row = "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8".
```
== 03 Beseitigung von Linksrekursionen
#question[
+ Wo befinden sich in der folgenden Grammatik Linksrekursionen? Geben Sie die Produktionen an.
+ Wie könnte man die Linksrekursionen entfernen? Geben Sie eine umgeformte EBNF Grammatik ohne Linksrekursionen an. Ersetzten Sie die Linksrekursionen dabei durch Iterationen.
```ebnf
Object = ident ":" "{" Props "}" ";".
Props = ident ":" Value | Props "," ident ":" Value .
Value = "" text "" | Value "+" "" text "" | ε .
```
Beispielsätze:
```
alice : { name: Alice, greeting: welcome + alice };
bob: { name: Bob, greeting: hello + to + bob };
test: { noValue: , emptyValue: empty, plusValue: + plus };
```
]
=== Task 1
- line 2: Props is left recursive
- line 3: Value is left recursive
=== Task 2
```ebnf
Props = ident ":" Value { "," ident ":" Value } ";".
Value = (ε | "" text "") {"+" "" text ""}.
```
#figure(
image("task3.2.svg"),
)

1637
task3.2.excalidraw Normal file

File diff suppressed because it is too large Load Diff

5
task3.2.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 25 KiB