initial commit, finished 1a 1b

This commit is contained in:
2025-10-09 22:20:14 +02:00
commit 1fcef6aae9
2 changed files with 106 additions and 0 deletions

BIN
index.pdf Normal file

Binary file not shown.

106
index.typ Normal file
View File

@@ -0,0 +1,106 @@
#import "@preview/codly:1.3.0": *
#import "@preview/codly-languages:0.1.1": *
#import "@preview/catppuccin:1.0.1": catppuccin, flavors
#show: codly-init.with()
#show: catppuccin.with(flavors.latte)
#codly(languages: codly-languages)
= Exercise 01
#let question(body) = block(
fill: luma(240),
inset: 8pt,
radius: 4pt
)[
#body
]
== 01 Grundbegriffe
=== Task a
#question[
Wie lang (in Terminalsymbolen) ist der kürzeste Satz in MicroJava, der mindestens ein Tilde (“∼”)
enthält? Geben Sie ein Beispiel für einen Satz dieser Länge an. Der Satz muss nur syntaktisch korrekt
(entspricht der Grammatik) sein, nicht semantisch (hält alle Kontextbedingungen der Sprache ein). Bei-
spielsweise ist x = x + 1, ohne x zuvor zu definieren, eine syntaktisch korrekte Zuweisung, semantisch
korrekt ist sie aber nicht.
]
```java
x[~1]++;
```
The statement above contains the following tokens:
- x (iden, terminal)
- "\[" (literal, terminal)
- "~" (literall, terminal)
- 1 (number, terminal)
- "\]" (literal, terminal)
- "++" (literal, terminal)
- ";" (literal, terminal)
To sum it up the statement has a `~` and has a terminal symbol count of 7.
=== Task b
#question[
Sind die Nonterminalsymbole Statement und ActPars rekursiv? Wenn ja, geben Sie alle Rekursionen-
arten an (Transitivität: direkt, indirekt; Orientierung: links, rechts, zentral). Beispiele für Rekursionsarten
sind direkt zentralrekursiv, indirekt linksrekursiv, . . . Pro NT kann es mehrere Rekursionsarten geben.
Geben Sie bei indirekten Rekursionen einen möglichen Pfad an (Beispiel: Factor ist indirekt zentralre-
kursiv über Factor -> Expr -> Term -> Factor).
]
==== Statement
The relevant Productions for the Statement Symbol are:
```
Statement = Designator ( Assignop Expr | ActPars | "++" | "--" ) ";"
| "if" "(" Condition ")" Statement [ "else" Statement ]
| "while" "(" Condition ")" Statement
| "break" ";"
| "return" [ Expr ] ";"
| "read" "(" Designator ")" ";"
| "print" "(" Expr [ "," number ] ")" ";"
| Block
| ";".
Block = "{" { Statement } "}".
```
We have the following Recursions:
- line 2: Statement is directly central recursive
- line 3: Statement is directly right recursive
- line 8: Block is indirectly central recursive
==== ActPars
The relevant Productions for the ActPars Symbol are:
```
ActPars = "(" [ Expr { "," Expr } ] ")".
Expr = [ "" ] Term { Addop Term }.
Term = Factor { Mulop Factor }.
Factor = Designator [ ActPars ]
| number
| charConst
| "new" ident [ "[" Expr "]" ]
| "(" Expr ")".
```
We have the following Recursion:
- line 1: Factor is indirectly central recursive
=== Task c