Files
exercise01/index.typ

107 lines
2.6 KiB
Typst
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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