Definitionen.tex 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. %!TEX root = Programmierparadigmen.tex
  2. \markboth{Ergänzende Definitionen}{Ergänzende Definitionen}
  3. \chapter*{Ergänzende Definitionen}
  4. \addcontentsline{toc}{chapter}{Ergänzende Definitionen}
  5. \begin{definition}[Quantoren]\xindex{Quantor}%
  6. \begin{defenum}
  7. \item $\forall x \in X: p(x)$: Für alle Elemente $x$ aus der Menge $X$ gilt
  8. die Aussage $p$.
  9. \item $\exists x \in X: p(x)$: Es gibt mindestens ein Element $x$ aus der
  10. Menge $X$, für das die Aussage $p$ gilt.
  11. \item $\exists! x \in X: p(x)$: Es gibt genau ein Element $x$ in der
  12. Menge $X$, sodass die Aussage $p$ gilt.
  13. \end{defenum}
  14. \end{definition}
  15. \begin{definition}[Prädikatenlogik]\xindex{Prädikatenlogik}%
  16. Eine Prädikatenlogik ist ein formales System, das Variablen und Quantoren
  17. nutzt um Aussagen zu formulieren.
  18. \end{definition}
  19. \begin{definition}[Aussagenlogik]\xindex{Aussagenlogik}%
  20. TODO
  21. \end{definition}
  22. \begin{definition}[Grammatik]\xindex{Grammatik}\xindex{Alphabet}\xindex{Nichtterminal}\xindex{Startsymbol}\xindex{Produktionsregel}\index{Ableitungsregel|see{Produktionsregel}}%
  23. Eine (formale) \textbf{Grammatik} ist ein Tupel $(\Sigma, V, P, S)$ wobei gilt:
  24. \begin{defenumprops}
  25. \item $\Sigma$ ist eine endliche Menge und heißt \textbf{Alphabet},
  26. \item $V$ ist eine endliche Menge mit $V \cap \Sigma = \emptyset$ und
  27. heißt \textbf{Menge der Nichtterminale},
  28. \item $S \in V$ heißt das \textbf{Startsymbol}
  29. \item $P = \Set{p: I \rightarrow r | I \in (V \cup \Sigma)^+, r \in (V \cup \Sigma)^*}$ ist eine endliche Menge aus \textbf{Produktionsregeln}
  30. \end{defenumprops}
  31. \end{definition}
  32. Man schreibt:
  33. \begin{itemize}
  34. \item $a \Rightarrow b$: Die Anwendung einer Produktionsregel auf $a$ ergibt $b$.
  35. \item $a \Rightarrow^* b$: Die Anwendung mehrerer (oder keiner) Produktionsregeln auf
  36. $a$ ergibt $b$.
  37. \item $a \Rightarrow^+ b$: Die Anwendung mindestens einer Produktionsregel auf $a$
  38. ergibt $b$.
  39. \end{itemize}
  40. \begin{beispiel}[Formale Grammatik]
  41. Folgende Grammatik $G = (\Sigma, V, P, A)$ erzeugt alle korrekten Klammerausdrücke:
  42. \begin{itemize}
  43. \item $\Sigma = \Set{(, )}$
  44. \item $V = \Set{\alpha}$
  45. \item $s = \alpha$
  46. \item $P = \Set{\alpha \rightarrow () | \alpha \alpha | (\alpha)}$
  47. \end{itemize}
  48. \end{beispiel}
  49. \begin{definition}[Kontextfreie Grammatik]\xindex{Grammatik!Kontextfreie}%
  50. Eine Grammatik $(\Sigma, V, P, S)$ heißt \textbf{kontextfrei}, wenn für
  51. jede Produktion $p: I \rightarrow r$ gilt: $I \in V$.
  52. \end{definition}
  53. \begin{definition}[Sprache]\xindex{Sprache}%
  54. Sei $G = (\Sigma, V, P, S)$ eine Grammatik. Dann ist
  55. \[L(G) := \Set{\omega \in \Sigma^* | S \Rightarrow^* \omega}\]
  56. die Menge aller in der Grammatik ableitbaren Wörtern. $L(G)$ heißt Sprache
  57. der Grammatik $G$.
  58. \end{definition}
  59. \begin{definition}\xindex{Linksableitung}\xindex{Rechtsableitung}%
  60. Sei $G = (\Sigma, V, P, S)$ eine Grammatik und $a \in (V \cup \Sigma)^+$.
  61. \begin{defenum}
  62. \item $\Rightarrow_L$ heißt \textbf{Linksableitung}, wenn die Produktion
  63. auf das linkeste Nichtterminal angewendet wird.
  64. \item $\Rightarrow_R$ heißt \textbf{Rechtsableitung}, wenn die Produktion
  65. auf das rechteste Nichtterminal angewendet wird.
  66. \end{defenum}
  67. \end{definition}
  68. \begin{beispiel}[Links- und Rechtsableitung]
  69. Sie $G$ wie zuvor die Grammatik der korrekten Klammerausdrücke:
  70. \begin{equation*}
  71. \begin{aligned}[t]
  72. \alpha &\Rightarrow_L \alpha \alpha\\
  73. &\Rightarrow_L \alpha \alpha \alpha\\
  74. &\Rightarrow_L () \alpha \alpha\\
  75. &\Rightarrow_L () (\alpha) \alpha\\
  76. &\Rightarrow_L () (()) \alpha\\
  77. &\Rightarrow_L () (()) ()\\
  78. \end{aligned}
  79. \qquad\Longleftrightarrow\qquad
  80. \begin{aligned}[t]
  81. \alpha &\Rightarrow_R \alpha \alpha\\
  82. &\Rightarrow_R \alpha \alpha \alpha\\
  83. &\Rightarrow_R \alpha \alpha ()\\
  84. &\Rightarrow_R \alpha (\alpha) ()\\
  85. &\Rightarrow_R \alpha (()) ()\\
  86. &\Rightarrow_R () (()) ()\\
  87. \end{aligned}
  88. \end{equation*}
  89. \end{beispiel}
  90. \begin{definition}[LL($k$)-Grammatik]\xindex{LL(k)-Grammatik}%
  91. Sei $G = (\Sigma, V, P, S)$ eine kontextfreie Grammatik. $G$ heißt
  92. LL($k$)-Grammatik für $k \in \mathbb{N}_{\geq 1}$, wenn jeder Ableitungsschritt durch
  93. die linkesten $k$ Symbole der Eingabe bestimmt ist.\todo{Was ist die Eingabe einer Grammatik?}
  94. \end{definition}
  95. Ein LL-Parser ist ein Top-Down-Parser liest die Eingabe von Links nach rechts
  96. und versucht eine Linksableitung der Eingabe zu berechnen. Ein LL($k$)-Parser
  97. kann $k$ Token vorausschauen, wobei $k$ als \textit{Lookahead}\xindex{Lookahead}
  98. bezeichnet wird.
  99. \begin{satz}
  100. Für linksrekursive, kontextfreie Grammatiken $G$ gilt:
  101. \[\forall k \in \mathbb{N}: G \notin \SLL(k)\]
  102. \end{satz}