finished the second and third task
This commit is contained in:
67
index.typ
67
index.typ
@@ -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
1637
task3.2.excalidraw
Normal file
File diff suppressed because it is too large
Load Diff
5
task3.2.svg
Normal file
5
task3.2.svg
Normal file
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 25 KiB |
Reference in New Issue
Block a user