diff options
Diffstat (limited to 'implementation.tex')
-rw-r--r-- | implementation.tex | 52 |
1 files changed, 27 insertions, 25 deletions
diff --git a/implementation.tex b/implementation.tex index 26ee2c7..f70f5db 100644 --- a/implementation.tex +++ b/implementation.tex | |||
@@ -1,5 +1,7 @@ | |||
1 | Im Rahmen dieser Arbeit haben wir die in den vorherigen Abschnitten beschriebenen Verfahren und Konstruktionen in Haskell implementiert. | 1 | Im Rahmen dieser Arbeit haben wir die in den vorherigen Abschnitten beschriebenen Verfahren und Konstruktionen in Haskell implementiert. |
2 | 2 | ||
3 | Diese Arbeit und die assoziierte Implementierung sind verfügbar unter \url{https://git.yggdrasil.li/gkleen/pub/incremental-dfsts}. | ||
4 | |||
3 | Es hat sich hierbei die oben beschriebene Konstruktion von $\Lleftarrow$ als Komposition algebraischer Transformationen und generischer, wohlbekannter Algorithmen (Breitensuche auf einem beliebigem Graph) ergeben. | 5 | Es hat sich hierbei die oben beschriebene Konstruktion von $\Lleftarrow$ als Komposition algebraischer Transformationen und generischer, wohlbekannter Algorithmen (Breitensuche auf einem beliebigem Graph) ergeben. |
4 | Unsere vorherigen Versuche, $\Lleftarrow$ in einem imperativeren Stil zu implementieren, blieben erfolglos; | 6 | Unsere vorherigen Versuche, $\Lleftarrow$ in einem imperativeren Stil zu implementieren, blieben erfolglos; |
5 | Größte Schwierigkeiten hat bereitet, die diversen Randbedingungen (Anfangs- und Endzustand, zu produzierende Ausgabe) innerhalb des Algorithmus zur Breitensuche zu wahren. | 7 | Größte Schwierigkeiten hat bereitet, die diversen Randbedingungen (Anfangs- und Endzustand, zu produzierende Ausgabe) innerhalb des Algorithmus zur Breitensuche zu wahren. |
@@ -11,23 +13,23 @@ Die Implementierung ist aufgeteilt in zwei Stack\footnote{\url{https://haskellst | |||
11 | Die Module innerhalb von \texttt{edit-lens} entsprechen im wesentlichen den Sektionen dieser Arbeit: | 13 | Die Module innerhalb von \texttt{edit-lens} entsprechen im wesentlichen den Sektionen dieser Arbeit: |
12 | \begin{description} | 14 | \begin{description} |
13 | \item[Control.Edit] | 15 | \item[Control.Edit] |
14 | Definition von Moduln | 16 | Definition von Moduln |
15 | \item[Control.Lens.Edit] | 17 | \item[Control.Lens.Edit] |
16 | Definition von zustandsbehafteten Monoidhomomorphismen und edit-lenses sowohl als Typklasse als auch als existentiell quantifizierter Datentyp | 18 | Definition von zustandsbehafteten Monoidhomomorphismen und edit-lenses sowohl als Typklasse als auch als existentiell quantifizierter Datentyp |
17 | \item[Control.Edit.String] | 19 | \item[Control.Edit.String] |
18 | Eine simple edit-Sprache auf Strings | 20 | Eine simple edit-Sprache auf Strings |
19 | \item[Control.Edit.String.Affected] | 21 | \item[Control.Edit.String.Affected] |
20 | Ein Algorithmus um die von einem edit aus \textbf{Control.Edit.String} betroffene Stelle in einem String einzuschränken | 22 | Ein Algorithmus um die von einem edit aus \textbf{Control.Edit.String} betroffene Stelle in einem String einzuschränken |
21 | \item[Control.FST] | 23 | \item[Control.FST] |
22 | Datentyp, schrittweise-, und vollständige Auswertung und die algebraischen Konstruktionen aus $\Lleftarrow$ für finite state transducer | 24 | Datentyp, schrittweise-, und vollständige Auswertung und die algebraischen Konstruktionen aus $\Lleftarrow$ für finite state transducer |
23 | \item[Control.DFST] | 25 | \item[Control.DFST] |
24 | Datentyp, schrittweise-, und vollständige Auswertung sowie Umwandlung zu einem FST für deterministische finite state transducer | 26 | Datentyp, schrittweise-, und vollständige Auswertung sowie Umwandlung zu einem FST für deterministische finite state transducer |
25 | \item[Control.Lens.Edit.ActionTree] | 27 | \item[Control.Lens.Edit.ActionTree] |
26 | Das beschriebene Verfahren zur Darstellung eines beliebigen DFST als edit-lens für die edit-Sprache aus \textbf{Control.Edit.String} | 28 | Das beschriebene Verfahren zur Darstellung eines beliebigen DFST als edit-lens für die edit-Sprache aus \textbf{Control.Edit.String} |
27 | 29 | ||
28 | Es ist hierbei jedoch der konkrete Typ der Wirkung und das Suchschema für $\Lleftarrow$ als Typklasse abstrahiert | 30 | Es ist hierbei jedoch der konkrete Typ der Wirkung und das Suchschema für $\Lleftarrow$ als Typklasse abstrahiert |
29 | \item[Control.DFST.Lens] | 31 | \item[Control.DFST.Lens] |
30 | Konkrete Anwendung von \textbf{Control.Lens.Edit.ActionTree} auf DFSTs | 32 | Konkrete Anwendung von \textbf{Control.Lens.Edit.ActionTree} auf DFSTs |
31 | \end{description} | 33 | \end{description} |
32 | 34 | ||
33 | \texttt{edit-lens} enthält zudem eine rudimentäre suite von Tests, die die Korrektheit der FST- und DFST-Implementierung, sowie den Algorithmus zum Anwenden von String-Edits prüft. | 35 | \texttt{edit-lens} enthält zudem eine rudimentäre suite von Tests, die die Korrektheit der FST- und DFST-Implementierung, sowie den Algorithmus zum Anwenden von String-Edits prüft. |
@@ -35,43 +37,43 @@ Die Module innerhalb von \texttt{edit-lens} entsprechen im wesentlichen den Sekt | |||
35 | \texttt{interactive-edit-lens} besteht aus nur drei Modulen: | 37 | \texttt{interactive-edit-lens} besteht aus nur drei Modulen: |
36 | \begin{description} | 38 | \begin{description} |
37 | \item[Interact] | 39 | \item[Interact] |
38 | Implementierung des interaktiven Editors als TUI\footnote{\url{https://hackage.haskell.org/package/brick-0.47}} | 40 | Implementierung des interaktiven Editors als TUI\footnote{\url{https://hackage.haskell.org/package/brick-0.47}} |
39 | \item[Interact.Types] | 41 | \item[Interact.Types] |
40 | Unterliegende Datentypen für \texttt{Interact} | 42 | Unterliegende Datentypen für \texttt{Interact} |
41 | \item[Main] | 43 | \item[Main] |
42 | Aufruf von \texttt{Interact} und Implementierung der angebotenen DFSTs | 44 | Aufruf von \texttt{Interact} und Implementierung der angebotenen DFSTs |
43 | \end{description} | 45 | \end{description} |
44 | 46 | ||
45 | \subsubsection{Verwendung des interaktiven Editors} | 47 | \subsubsection{Verwendung des interaktiven Editors} |
46 | 48 | ||
47 | \begin{figure}[h] | 49 | \begin{figure}[h] |
48 | \begin{center} | 50 | \begin{center} |
49 | \includegraphics{screenshot} | 51 | \includegraphics{screenshot} |
50 | \caption{Der interaktive Editor (im Modus \texttt{json-newl}) nach Import einer kleinen JSON-Datei} | 52 | \caption{Der interaktive Editor (im Modus \texttt{json-newl}) nach Import einer kleinen JSON-Datei} |
51 | \end{center} | 53 | \end{center} |
52 | \end{figure} | 54 | \end{figure} |
53 | 55 | ||
54 | Der interaktive Editor kann von der Befehlseingabe gestartet werden wie folgt: | 56 | Der interaktive Editor kann von der Befehlseingabe gestartet werden wie folgt: |
55 | \begin{lstlisting}[language=bash] | 57 | \begin{lstlisting}[language=bash] |
56 | $ stack build | 58 | $ stack build |
57 | $ stack exec interact <dfst> | 59 | $ stack exec interact <dfst> |
58 | \end{lstlisting} | 60 | \end{lstlisting} |
59 | Hierbei ist \texttt{<dfst>} einer der in \texttt{Main} implementierten DFSTs: | 61 | Hierbei ist \texttt{<dfst>} einer der in \texttt{Main} implementierten DFSTs: |
60 | 62 | ||
61 | \begin{description} | 63 | \begin{description} |
62 | \item[linebreak] | 64 | \item[linebreak] |
63 | Wandelt Zeilenumbrüche und Leerzeichen ineinander um, sodass alle Zeilen mindestens 80 Zeichen enthalten (Beispiel \ref{eg:linebreak}) | 65 | Wandelt Zeilenumbrüche und Leerzeichen ineinander um, sodass alle Zeilen mindestens 80 Zeichen enthalten (Beispiel \ref{eg:linebreak}) |
64 | \item[switch] | 66 | \item[switch] |
65 | Der einfache DFST aus Abbildung \ref{fig:switchdfst} | 67 | Der einfache DFST aus Abbildung \ref{fig:switchdfst} |
66 | \item[json-newl] | 68 | \item[json-newl] |
67 | Normalisiert Whitespace in einem JSON\footnote{\url{https://de.wikipedia.org/wiki/JSON}}-String. | 69 | Normalisiert Whitespace in einem JSON\footnote{\url{https://de.wikipedia.org/wiki/JSON}}-String. |
68 | JSON ist nicht regulär; Es lassen sich Klammern nicht prüfen und Einrückung nicht in Abhängigkeit der Verschachtelung implementieren | 70 | JSON ist nicht regulär; Es lassen sich Klammern nicht prüfen und Einrückung nicht in Abhängigkeit der Verschachtelung implementieren |
69 | \item[alternate] | 71 | \item[alternate] |
70 | Akzeptiert Strings gerader Länge, jeder zweite Buchstabe wird in den entsprechenden Großbuchstaben umgewandelt und verdoppelt | 72 | Akzeptiert Strings gerader Länge, jeder zweite Buchstabe wird in den entsprechenden Großbuchstaben umgewandelt und verdoppelt |
71 | \item[id] | 73 | \item[id] |
72 | Identität-DFST | 74 | Identität-DFST |
73 | \item[double] | 75 | \item[double] |
74 | Verdoppelt jedes Zeichen | 76 | Verdoppelt jedes Zeichen |
75 | \end{description} | 77 | \end{description} |
76 | 78 | ||
77 | Alle DFSTs (außer \texttt{json-newl}) akzeptieren nur lateinische Buchstaben, Leerzeichen und das Ausrufezeichen. | 79 | Alle DFSTs (außer \texttt{json-newl}) akzeptieren nur lateinische Buchstaben, Leerzeichen und das Ausrufezeichen. |