<commit_before>\section{Umsetzung von Entwurfsentscheidungen}
% TODO: wichtige entwurfsentscheidungen anhand implementierungsbeispielen
\subsection{Funktionen}
Um rekursive Funktionsaufrufe zu verhindern, wurde das Scoping dergestalt umgesetzt, dass die Referenzierung einer Funktion (insbesondere die Verwendung innerhalb einer anderen Funktion) erst nach ihrer Deklaration möglich ist.

\subsection{Arithmetik}
\subsubsection{Division/Modulo mit Divisor gleich Null \label{umsetzung_division_null}}
Tritt beim Ausführen eines Programms eine Division durch Null auf, so wird der entsprechende Ausdruck rot markiert und die Ausführung abgebrochen. Entsprechend muss für einen erfolgreichen Beweisversuch durch den Beweiser gezeigt werden, dass keine Division durch Null auftreten kann. Dieses Verhalten folgt dem "`principle of least surprise"' für Benutzer der Software.

\subsection{Entwurfsmuster}
\subsubsection{Delegation-Pattern}
Das Delegate-Pattern findet hauptsächlich in der GUI Anwendung. Die Eclipse-Platform "`delegiert"' mit Hilfe dieses Entwurfsmusters Aufgaben an Worthwhile-eigenen Code. Ein Beispiel defür ist \texttt{WorthwhileLaunchConfigurationDelegate}.

\subsubsection{Facade-Pattern}
Um den Umgang mit der Beweiserschnittstelle zu erleichtern, interne Implementationsdetails zu verstecken und ausschließlich ausgewählte Methoden zur Verfügung zu stellen, wurde unter anderem hier das Facade-Pattern angewendet.

\subsubsection{Observer-Pattern}
Das Oberserver-Pattern wird für die Kommunikation des Interpreters mit dem Debugger eingesetzt. Dabei informiert der Interpreter den Debugger über bestimmte Ereignisse, wie zum Beispiel die Erfolgreiche Ausführung eines Statements oder das Auftreten eines Fehlers beim Interpretieren.

\subsubsection{Visitor-Pattern}
Das Visitor-Pattern ist ein zentrales Entwurfsmuster und wird an vielen Stellen in Worthwhile verwendet, um den AST zu traversieren. Zusätzlich zu den schon im Entwurf geplanten Visitor-Klassen haben sich einige Visitor-Implementierungen mit spezieller Funktionalität ergeben, wie zum Beispiel der \texttt{ASTNodeBottomUpVisitor}, welcher den AST ausgehend von einem Startknoten rückwärts besucht, oder der \\ \texttt{ASTNodeReturnVisitor}, der einen generischen Rückgabewert besitzt.<commit_msg>[bericht] Add explanation for array fail in prover<commit_after>\section{Umsetzung von Entwurfsentscheidungen}
% TODO: wichtige entwurfsentscheidungen anhand implementierungsbeispielen
\subsection{Funktionen}
Um rekursive Funktionsaufrufe zu verhindern, wurde das Scoping dergestalt umgesetzt, dass die Referenzierung einer Funktion (insbesondere die Verwendung innerhalb einer anderen Funktion) erst nach ihrer Deklaration möglich ist.

\subsection{Arrays}
Das gegenüber dem Entwurf veränderte Verhalten von Arrays wurde im Interpreter implementiert. Die im Entwurf konzepierten Datenstrukturen zur Darstellung von Formeln stellten sich jedoch bei der Implementation von Arrays in der Beweiserschnittstelle als unzureichend heraus. Aufgrund vom Zeitmangel konnten die Datenstrukturen nicht mehr angepasst werden und die Funktionalität deshalb nicht implementiert werden.

\subsection{Arithmetik}
\subsubsection{Division/Modulo mit Divisor gleich Null \label{umsetzung_division_null}}
Tritt beim Ausführen eines Programms eine Division durch Null auf, so wird der entsprechende Ausdruck rot markiert und die Ausführung abgebrochen. Entsprechend muss für einen erfolgreichen Beweisversuch durch den Beweiser gezeigt werden, dass keine Division durch Null auftreten kann. Dieses Verhalten folgt dem "`principle of least surprise"' für Benutzer der Software.

\subsection{Entwurfsmuster}
\subsubsection{Delegation-Pattern}
Das Delegate-Pattern findet hauptsächlich in der GUI Anwendung. Die Eclipse-Platform "`delegiert"' mit Hilfe dieses Entwurfsmusters Aufgaben an Worthwhile-eigenen Code. Ein Beispiel defür ist \texttt{WorthwhileLaunchConfigurationDelegate}.

\subsubsection{Facade-Pattern}
Um den Umgang mit der Beweiserschnittstelle zu erleichtern, interne Implementationsdetails zu verstecken und ausschließlich ausgewählte Methoden zur Verfügung zu stellen, wurde unter anderem hier das Facade-Pattern angewendet.

\subsubsection{Observer-Pattern}
Das Oberserver-Pattern wird für die Kommunikation des Interpreters mit dem Debugger eingesetzt. Dabei informiert der Interpreter den Debugger über bestimmte Ereignisse, wie zum Beispiel die Erfolgreiche Ausführung eines Statements oder das Auftreten eines Fehlers beim Interpretieren.

\subsubsection{Visitor-Pattern}
Das Visitor-Pattern ist ein zentrales Entwurfsmuster und wird an vielen Stellen in Worthwhile verwendet, um den AST zu traversieren. Zusätzlich zu den schon im Entwurf geplanten Visitor-Klassen haben sich einige Visitor-Implementierungen mit spezieller Funktionalität ergeben, wie zum Beispiel der \texttt{ASTNodeBottomUpVisitor}, welcher den AST ausgehend von einem Startknoten rückwärts besucht, oder der \\ \texttt{ASTNodeReturnVisitor}, der einen generischen Rückgabewert besitzt.

{'fraction_non_alphanumeric': 0.03849970232188926, 'fraction_numerical': 0.0, 'mean_word_length': 6.789799072642968, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3741031', 'n_tokens_mistral': 1470, 'n_tokens_neox': 1544, 'n_words': 547}