finished the second and third task
This commit is contained in:
67
index.typ
67
index.typ
@@ -10,7 +10,7 @@
|
|||||||
= Exercise 01
|
= Exercise 01
|
||||||
|
|
||||||
#let question(body) = block(
|
#let question(body) = block(
|
||||||
fill: luma(240),
|
fill: luma(255),
|
||||||
inset: 8pt,
|
inset: 8pt,
|
||||||
radius: 4pt
|
radius: 4pt
|
||||||
)[
|
)[
|
||||||
@@ -139,4 +139,69 @@ We have the following Recursion:
|
|||||||
- AsignOp: { ";" }
|
- AsignOp: { ";" }
|
||||||
- CondTerm: { "&&", Follow(CondTerm) } = { "&&", CondFact }
|
- 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