diff options
author | Gregor Kleen <gkleen@yggdrasil.li> | 2019-06-07 09:08:42 +0200 |
---|---|---|
committer | Gregor Kleen <gkleen@yggdrasil.li> | 2019-06-07 09:08:42 +0200 |
commit | a29cce747f3717e32231c9a92b40be12832037b6 (patch) | |
tree | 70f399682dec8657719eae4358e87cdc24bbf42f /intro.tex | |
parent | 9a02751c1e588a5bbb83bb7e543c26486d3079d5 (diff) | |
download | incremental-dfsts-a29cce747f3717e32231c9a92b40be12832037b6.tar incremental-dfsts-a29cce747f3717e32231c9a92b40be12832037b6.tar.gz incremental-dfsts-a29cce747f3717e32231c9a92b40be12832037b6.tar.bz2 incremental-dfsts-a29cce747f3717e32231c9a92b40be12832037b6.tar.xz incremental-dfsts-a29cce747f3717e32231c9a92b40be12832037b6.zip |
Finish for submission
Diffstat (limited to 'intro.tex')
-rw-r--r-- | intro.tex | 47 |
1 files changed, 25 insertions, 22 deletions
@@ -1,18 +1,18 @@ | |||
1 | \subsubsection{Motivation} | 1 | \subsection{Motivation} |
2 | 2 | ||
3 | Unter einem inkrementellen Parser \cite{ghezzi1979incremental} verstehen wir ein Programm, das, nach einem initialen Parsevorgang, gegeben eine Spezifikation einer Änderung der textuellen Eingabe i.A. schneller ein neues Ergebnis erzeugt als es ohne zusätzlichen Kontext möglich wäre (gewöhnlicherweise in logarithmischer Zeit in der Länge der Eingabe). | 3 | Unter einem inkrementellen Parser \cite{ghezzi1979incremental} verstehen wir ein Programm, das, nach einem initialen Parsevorgang, gegeben eine Spezifikation einer Änderung der textuellen Eingabe i.A. schneller, gewöhnlicherweise in logarithmischer Zeit in der Länge der Eingabe, ein neues Ergebnis erzeugt als es ohne zusätzlichen Kontext möglich wäre. |
4 | 4 | ||
5 | Es ist nun prinzipiell wünschenswert die algebraische Struktur derartiger Klassen von Programmen zu untersuchen, mit dem Ziel neue Parser mit generischen Mitteln aus bereits Bekannten konstruieren zu können. | 5 | Es ist nun prinzipiell wünschenswert die algebraische Struktur derartiger Klassen von Programmen zu untersuchen mit dem Ziel, neue Parser mit generischen Mitteln aus bereits Bekannten konstruieren zu können. |
6 | 6 | ||
7 | In dieser Arbeit versuchen wir, anhand von finite state transducern als Spezialfall, inkrementelle Parser und die unterliegenden edits mit neuerer algebraischer Struktur, edit-lenses \cite{hofmann2012edit}, zu versehen um Komponierbarkeit zu vereinfachen. | 7 | In dieser Arbeit versuchen wir, anhand von finite state transducern als Spezialfall, inkrementelle Parser und die unterliegenden edits mit neuerer algebraischer Struktur, edit-lenses \cite{hofmann2012edit}, zu versehen um Komponierbarkeit zu vereinfachen. |
8 | Vor allem versuchen wir somit zu demonstrieren, dass sich bekannte Klassen von Programmen, unter Erhalt ihrer vollen Struktur, als edit-lenses auffassen lassen, auch wenn die Darstellung als konventionelle funktionale Linse unzufriedenstellend wäre. | 8 | Vor Allem versuchen wir somit zu demonstrieren, dass sich bekannte Klassen von Programmen unter Erhalt ihrer vollen Struktur als edit-lenses auffassen lassen, auch dann, wenn die Darstellung als konventionelle funktionale Linse unzufriedenstellend wäre. |
9 | 9 | ||
10 | \subsubsection{Inhalt} | 10 | \subsection{Inhalt} |
11 | 11 | ||
12 | Wir stellen in Abschnitt \ref{edit-lenses} die Definitionen und Konstruktion von edit-lenses aus \cite{hofmann2012edit} vor und diskutieren kurz die Kompatibilität unserer Implementierung und edit-lenses im Allgemeinen mit etablierten frameworks für funktionale Linsen in Haskell. | 12 | Wir stellen in Abschnitt \ref{edit-lenses} die Definitionen und Konstruktion von edit-lenses aus \cite{hofmann2012edit} vor und diskutieren kurz die Kompatibilität unserer Implementierung und edit-lenses im Allgemeinen mit etablierten Frameworks für funktionale Linsen in Haskell. |
13 | In Abschnitt \ref{finite-state-transducers} präsentieren wir eine etablierte Version von finite state transducern, für die folgenden Teile relevante Konstruktionen darauf und einige assoziierte Beispiele. | 13 | In Abschnitt \ref{finite-state-transducers} präsentieren wir eine etablierte Version von finite state transducern, für die folgenden Teile relevante Konstruktionen darauf und einige assoziierte Beispiele. |
14 | Abschnitt \ref{edit-lenses-fuxfcr-deterministic-finite-state-transducers} beschreibt eine Methode beliebige deterministische finite state transducers als edit-lenses aufzufassen und stellt somit eine non-triviale Anwendung der Methoden und Konzepte aus \cite{hofmann2012edit} dar. | 14 | Abschnitt \ref{edit-lenses-fuxfcr-deterministic-finite-state-transducers} beschreibt eine Methode, beliebige deterministische finite state transducers als edit-lenses aufzufassen und stellt somit eine nicht triviale Anwendung der Methoden und Konzepte aus \cite{hofmann2012edit} dar. |
15 | In Abschnitt \ref{ausblick-edit-lenses-fuxfcr-non-determinische-finite-state-transducers} stellen wir kurz einen Ansatz dar unsere Konstruktion aus \ref{edit-lenses-fuxfcr-deterministic-finite-state-transducers} auch auf non-deterministische finite state transducer zu erweitern. | 15 | In Abschnitt \ref{ausblick-edit-lenses-fuxfcr-non-determinische-finite-state-transducers} stellen wir kurz einen Ansatz vor, unsere Konstruktion aus \ref{edit-lenses-fuxfcr-deterministic-finite-state-transducers} auch auf nicht-deterministische finite state transducers zu erweitern. |
16 | In Abschnitt \ref{implementierung} kommentieren wir den Implementierungsprozess der Arbeit und die Schlüsse, die wir aus der Implementierung als solcher ziehen konnten. | 16 | In Abschnitt \ref{implementierung} kommentieren wir den Implementierungsprozess der Arbeit und die Schlüsse, die wir aus der Implementierung als solcher ziehen konnten. |
17 | Abschnitt \ref{ausblick-anwendbarkeit-der-implementierung-auf-andere-parser} beschreibt kurz wie sich das dargestellte Verfahren auf andere Sorten von Parsern anwenden ließe. | 17 | Abschnitt \ref{ausblick-anwendbarkeit-der-implementierung-auf-andere-parser} beschreibt kurz wie sich das dargestellte Verfahren auf andere Sorten von Parsern anwenden ließe. |
18 | 18 | ||
@@ -43,22 +43,22 @@ Bidirektionale, inkrementelle, und kombinierbare Parser und ihre Analyse sind ei | |||
43 | 43 | ||
44 | \begin{description} % TODO: more | 44 | \begin{description} % TODO: more |
45 | \item[1979] \cite{ghezzi1979incremental} präsentieren, in einer der ersten Arbeiten zu dem Thema, einen Ansatz zum inkrementellen Parsen von deterministischen und kontextfreien Sprachen basierend auf dem $LR$-Ansatz. | 45 | \item[1979] \cite{ghezzi1979incremental} präsentieren, in einer der ersten Arbeiten zu dem Thema, einen Ansatz zum inkrementellen Parsen von deterministischen und kontextfreien Sprachen basierend auf dem $LR$-Ansatz. |
46 | \item[1992] \cite{hedin1992incremental} präsentieren einen Formalismus zur inkrementellen \emph{semantischen} Analyse (d.h. das Versehen des Syntax-Baums eines Programms mit Attributen wie z.B. Typen) basierend auf (modifizierten) Attribut-Grammatiken. | 46 | \item[1992] \cite{hedin1992incremental} präsentieren einen Formalismus zur inkrementellen \emph{semantischen} Analyse\footnote{Das Versehen des Syntax-Baums eines Programms mit Attributen wie z.B. Typen} basierend auf (modifizierten) Attribut-Grammatiken. |
47 | \item[1997] \cite{wagner1997general} stellen einen Algorithmus zur inkrementellen lexikalischen Analyse (tokenizing) der auf den selben Spezifikationen arbeiten kann wie die UNIX-Tools \texttt{lex} und \texttt{flex}. | 47 | \item[1997] \cite{wagner1997general} stellen einen Algorithmus zur inkrementellen lexikalischen Analyse (tokenizing) der auf den selben Spezifikationen arbeiten kann wie die UNIX-Tools \texttt{lex} und \texttt{flex}. |
48 | \item[1998] \cite{wagner1998efficient} stellen neue, Laufzeit- und Speicher-optimale, Methoden zur Konstruktion inkrementeller Parser auf Basis beliebiger $LR(k)$-Grammatiken vor. | 48 | \item[1998] \cite{wagner1998efficient} stellen neue Laufzeit- und Speicher-optimale Methoden zur Konstruktion inkrementeller Parser auf Basis beliebiger $LR(k)$-Grammatiken vor. |
49 | \item[2001] \cite{swierstra2001combinator} demonstriert den Nutzen Kombinator-basierter Parser-Konstruktion in der Praxis | 49 | \item[2001] \cite{swierstra2001combinator} demonstriert den Nutzen Kombinator-basierter Parser-Konstruktion in der Praxis. |
50 | \item[2004] \cite{hu2004programmable} spezifizieren eine algebraisch strukturierte Sprache für bidirektionale Baum-Transformationen unter einer programmierbaren Konsistenzrelation mit Blick auf direkte Anwendung im Editieren von bestehenden Baum-Dokumenten | 50 | \item[2004] \cite{hu2004programmable} spezifizieren eine algebraisch strukturierte Sprache für bidirektionale Baum-Transformationen unter einer programmierbaren Konsistenzrelation mit Blick auf direkte Anwendung im Editieren von bestehenden Baum-Dokumenten. |
51 | \item[2007] \cite{foster2007combinators} präsentieren sowohl eine Sprache bidirektionaler Baum-Transformationen als konventionelle funktionale Linsen im Speziellen, als auch mathematische Resultate für funktionale Linsen und Sammlungen davon im Allgemeinen. | 51 | \item[2007] \cite{foster2007combinators} präsentieren sowohl eine Sprache bidirektionaler Baum-Transformationen als konventionelle funktionale Linsen im Speziellen, als auch mathematische Resultate für funktionale Linsen und Sammlungen dieser im Allgemeinen. |
52 | Auch enthalten ist eine nützliche Klassifikation und ein historischer Überblick diverser bidirektionalen Programmiertechniken. | 52 | Auch enthalten ist eine nützliche Klassifikation und ein historischer Überblick diverser bidirektionaler Programmiertechniken. |
53 | \item[2008] Analog zur Sprache bidirektionaler Baum-Transformation aus \cite{foster2007combinators} stellen \cite{bohannon2008boomerang} eine Sprache für semi-strukturierten Text (als Serie von vertauschbaren Schlüssel-Wert-Assoziationen) vor | 53 | \item[2008] Analog zur Sprache bidirektionaler Baum-Transformation aus \cite{foster2007combinators}, stellen \cite{bohannon2008boomerang} eine Sprache für semi-strukturierten Text als Serie von vertauschbaren Schlüssel-Wert-Assoziationen vor. |
54 | \item[2009] \cite{bernardy2009lazy} implementieren, im Rahmen der Arbeit am Text-Editor Yi, eine Kombinator-basierte Programmbibliothek zum inkrementellen Parsen basierend auf lazy evaluation und aggressivem Caching in Haskell | 54 | \item[2009] \cite{bernardy2009lazy} implementieren, im Rahmen der Arbeit am Text-Editor Yi, eine Kombinator-basierte Programmbibliothek zum inkrementellen Parsen basierend auf lazy evaluation und aggressivem Caching in Haskell. |
55 | \item[2011] \cite{hofmann2011symmetric} definieren symmetrische \emph{set-based}-lenses (funktionale Linsen im konventionellen Sinn), d.h. ohne strukturierte edits. | 55 | \item[2011] \cite{hofmann2011symmetric} definieren symmetrische \emph{set-based}-lenses (funktionale Linsen im konventionellen Sinn), d.h. ohne strukturierte edits. |
56 | Es wird auch die umfangreiche algebraische Struktur symmetrischer Linsen besprochen. | 56 | Es wird auch die umfangreiche algebraische Struktur symmetrischer Linsen besprochen. |
57 | Vieles hiervon vererbt sich direkt auf edit-lenses als Spezialfall symmetrischer Linsen. | 57 | Vieles hiervon lassen sich direkt auf edit-lenses als Spezialfall symmetrischer Linsen vererben. |
58 | \item[2012] \cite{hofmann2012edit} definieren edit-lenses. | 58 | \item[2012] \cite{hofmann2012edit} definieren edit-lenses. |
59 | In Abgrenzung zu bestehenden Formalismen symmetrischer funktionaler Linsen arbeiten edit-lenses ausschließlich auf algebraisch strukturierten edit-Sprachen, was sie besonders attraktiv macht. | 59 | In Abgrenzung zu bestehenden Formalismen symmetrischer funktionaler Linsen arbeiten edit-lenses ausschließlich auf algebraisch strukturierten edit-Sprachen, was sie besonders attraktiv macht. |
60 | \item[2013] \cite{hofmann2013edit} stellen eine generelle edit-Sprache (zur Verwendung mit und basierend auf edit-lenses) für eine weite Klasse von container-Datentypen (Listen, Bäume, Graphen, ...) vor | 60 | \item[2013] \cite{hofmann2013edit} stellen eine generelle edit-Sprache (zur Verwendung mit und basierend auf edit-lenses) für eine weite Klasse von container-Datentypen (Listen, Bäume, Graphen, ...) vor |
61 | \item[2014] \cite{zaytsev2014parsing} geben einen nützlichen Überblick über die, historisch inkonsistente, Terminologie und Konzepte im Zusammenhang mit Parsing | 61 | \item[2014] \cite{zaytsev2014parsing} geben einen nützlichen Überblick über die historisch inkonsistente Terminologie und Konzepte im Zusammenhang mit Parsing. |
62 | \item[2016] \cite{johnson2016unifying} betrachten Zusammenhänge diverser Klassen funktionaler Linsen (inkl. edit-lenses) und geben dabei einen umfangreichen Überblick über die bestehende Forschung. | 62 | \item[2016] \cite{johnson2016unifying} betrachten Zusammenhänge diverser Klassen funktionaler Linsen (inkl. edit-lenses) und geben dabei einen umfangreichen Überblick über die bestehende Forschung. |
63 | Ein relevantes Resultat ist hierbei ein Begriff von asymmetrischen edit-lenses kompatibel mit dem symmetrischen Fall. | 63 | Ein relevantes Resultat ist hierbei ein Begriff von asymmetrischen edit-lenses kompatibel mit dem symmetrischen Fall. |
64 | \end{description} | 64 | \end{description} |
@@ -68,16 +68,19 @@ Bidirektionale, inkrementelle, und kombinierbare Parser und ihre Analyse sind ei | |||
68 | Obwohl wir detailliertere Definitionen der folgenden Konzepte im Laufe der Arbeit geben, ist es dennoch nützlich vorab die Bedeutung der verwendeten Begriffe kurz anzuschneiden: | 68 | Obwohl wir detailliertere Definitionen der folgenden Konzepte im Laufe der Arbeit geben, ist es dennoch nützlich vorab die Bedeutung der verwendeten Begriffe kurz anzuschneiden: |
69 | 69 | ||
70 | \begin{description} | 70 | \begin{description} |
71 | \item[FST] \emph{Finite-State-Transducer} sind endliche Automaten, die bei jedem Zustandsübergang die Möglichkeit haben ein Zeichen an eine sich akkumulierende Ausgabe anzuhängen | 71 | \item[FST] \emph{Finite-State-Transducer} sind endliche Automaten, die bei jedem Zustandsübergang die Möglichkeit haben ein Zeichen an eine sich akkumulierende Ausgabe anzuhängen. |
72 | \item[DFST] \emph{Deterministic Finite-State-Transducer} sind FSTs bei denen für jeden Zustand jedes gelesene Zeichen maximal einen Zustandsübergang zulässt | 72 | \item[DFST] \emph{Deterministic Finite-State-Transducer} sind FSTs bei denen für jeden Zustand jedes gelesene Zeichen maximal einen Zustandsübergang zulässt. |
73 | \item[Monoid] \emph{Monoiden} sind algebraisch zwischen Halbgruppen und Gruppen angesiedelt. | 73 | \item[Monoid] \emph{Monoiden} sind algebraisch zwischen Halbgruppen und Gruppen angesiedelt. |
74 | Wir sagen eine Menge hat Monoidstruktur bzgl. einer zweistelligen Verknüpfung auf jener Menge, wenn sie ein neutrales Element enthält und die Verknüpfung assoziativ ist. | 74 | Wir sagen eine Menge hat Monoidstruktur bzgl. einer zweistelligen Verknüpfung auf jener Menge, wenn sie ein neutrales Element enthält und die Verknüpfung assoziativ ist. |
75 | \item[Moduln & edits] \emph{Moduln} verknüpfen eine Trägermenge mit einer Menge von \emph{edits} (mit monoidaler Struktur) auf jener Menge. | 75 | \item[Moduln & edits] \emph{Moduln} verknüpfen eine Trägermenge mit einer Menge von \emph{edits} (mit monoidaler Struktur) auf jener Menge. |
76 | Edits beschreiben jeweils eine partielle Abbildung innerhalb der Trägermenge. | 76 | Edits beschreiben jeweils eine partielle Abbildung innerhalb der Trägermenge. |
77 | \item[Funktionale Linsen] Eine \emph{Funktionale Linse} von $s$ in $a$ in der üblichen Definition (\emph{set-based}) ist ein Paar von Abbildungen $\searrow \colon s \to a$ und $\nearrow \colon (a \to a) \to (s \to s)$ mit umfangreicher algebraischer Struktur, die die Komposition komplexer Linsen aus Einfacheren ermöglicht. | 77 | \item[Funktionale Linsen] Eine \emph{Funktionale Linse} von $s$ in $a$ in der üblichen Definition (\emph{set-based}) ist ein Paar von Abbildungen $\searrow \colon s \to a$ und $\nearrow \colon (a \to a) \to (s \to s)$ mit umfangreicher algebraischer Struktur, die die Komposition komplexer Linsen aus Einfacheren ermöglicht. |
78 | Wir finden es hilfreich von einer Projektion ($\searrow$) und einem \emph{edit-Propagator} ($\nearrow$) zu sprechen. | 78 | Wir finden es hilfreich von einer Projektion ($\searrow$) und einem \emph{edit-Propagator} ($\nearrow$) zu sprechen. |
79 | \item[Van-Laarhoven Linsen] In \cite{laarhoven} wurde eine Darstellung als eine (über einen Funktor parametrisierte) Funktion dargelegt, die unter anderem auch die soeben beschriebenen funktionalen Linsen einbetten kann | 79 | \item[Van-Laarhoven Linsen] In \cite{laarhoven} wurde eine Darstellung als eine über einen Funktor parametrisierte Funktion dargelegt, die unter anderem auch die soeben beschriebenen funktionalen Linsen einbetten kann. |
80 | \item[edit-lenses] \emph{edit-lenses} verknüpfen zwei Moduln-Trägermengen indem sie edits des einen Modul in die des Anderen übersetzen. | 80 | \item[edit-lenses] \emph{edit-lenses} verknüpfen zwei Moduln-Trägermengen indem sie edits des einen Moduls in die des Anderen übersetzen. |
81 | Hierbei wird ein, mit den jeweiligen Elementen der Trägermengen konsistenter, unterliegender Zustand, das \emph{Komplement} der edit-lens, gewahrt. | 81 | Hierbei wird ein, mit den jeweiligen Elementen der Trägermengen konsistenter, unterliegender Zustand, das \emph{Komplement} der edit-lens, gewahrt. |
82 | Intuitiv speichert das Komplement genau jene Information, die nicht in beiden Darstellungen vorkommt. | 82 | Intuitiv speichert das Komplement genau jene Information, die nicht in beiden Darstellungen vorkommt. |
83 | \item[Parser] \emph{Parser} sind Programme, die einen Text (als Liste von Symbolen $\Sigma^\star$ aus einem Alphabet $\Sigma$) Seiteneffekt-frei verarbeiten $\Sigma^\star \to a$. | ||
84 | \item[Inkrementelle Parser] \emph{Inkrementelle Parser} sind Programme, die sowohl in der Lage sind als Parser zu agieren $\Sigma^\star \to a$, als auch, nach einem vorhergehenden konventionellen Parsevorgang, eine Änderung am Eingabetext in eine Änderung am Ergebnis zu übersetzen $\partial \left ( \Sigma^\star \right ) \to \partial a$. | ||
85 | Hierbei muss die Laufzeitcharakteristik i.A. besser sein als die Änderung auf die alte Eingabe anzuwenden und schlichtweg neu zu Parsen. | ||
83 | \end{description} | 86 | \end{description} |