summaryrefslogtreecommitdiff
path: root/edit-lens/src
diff options
context:
space:
mode:
authorGregor Kleen <gkleen@yggdrasil.li>2018-05-07 11:32:30 +0200
committerGregor Kleen <gkleen@yggdrasil.li>2018-05-07 11:32:30 +0200
commit50e46d9e9b0b025afe1b433805a6f6d5df55894e (patch)
treedc3c1185978b0829fb11144da4a435e7e254f33e /edit-lens/src
parentc37395089c3a5dfc32406685ac5b0102050a8aa1 (diff)
downloadincremental-dfsts-50e46d9e9b0b025afe1b433805a6f6d5df55894e.tar
incremental-dfsts-50e46d9e9b0b025afe1b433805a6f6d5df55894e.tar.gz
incremental-dfsts-50e46d9e9b0b025afe1b433805a6f6d5df55894e.tar.bz2
incremental-dfsts-50e46d9e9b0b025afe1b433805a6f6d5df55894e.tar.xz
incremental-dfsts-50e46d9e9b0b025afe1b433805a6f6d5df55894e.zip
Really just need prefixes/suffixes
Diffstat (limited to 'edit-lens/src')
-rw-r--r--edit-lens/src/Data/String/DFST/Lens.lhs4
1 files changed, 3 insertions, 1 deletions
diff --git a/edit-lens/src/Data/String/DFST/Lens.lhs b/edit-lens/src/Data/String/DFST/Lens.lhs
index 51ce970..2111ca4 100644
--- a/edit-lens/src/Data/String/DFST/Lens.lhs
+++ b/edit-lens/src/Data/String/DFST/Lens.lhs
@@ -74,7 +74,7 @@ Gegeben eine Sequenz (`StringEdits`) von zu übersetzenden Änderungen genügt e
74Wir definieren zunächst die \emph{Wirkung} eines DFST auf einen festen String als eine Abbildung `state -> (state, String)`, die den aktuellen Zustand vorm Parsen des Strings auf den Zustand danach und die (womöglich leere) Ausgabe schickt. 74Wir definieren zunächst die \emph{Wirkung} eines DFST auf einen festen String als eine Abbildung `state -> (state, String)`, die den aktuellen Zustand vorm Parsen des Strings auf den Zustand danach und die (womöglich leere) Ausgabe schickt.
75Diese Wirkungen bilden einen Monoiden analog zu Endomorphismen, wobei die Resultat-Strings concateniert werden. 75Diese Wirkungen bilden einen Monoiden analog zu Endomorphismen, wobei die Resultat-Strings concateniert werden.
76 76
77Die Unterliegende Idee ist nun im Komplement der edit-lens eine Liste von Wirkungen (eine für jedes Zeichen der Eingabe des DFSTs) und einen Cache aller möglichen monoidalen Summen von zusammenhängenden Teilstücke zu halten. 77Die Unterliegende Idee ist nun im Komplement der edit-lens eine Liste von Wirkungen (eine für jedes Zeichen der Eingabe des DFSTs) und einen Cache der monoidalen Summen aller möglich Präfixe und Suffixe zu halten.
78Da wir wissen welche Stelle im input-String von einem gegebenen edit betroffen ist können wir, anhand der Wirkung des Teilstücks bis zu jener Stelle, den output-String in einen durch den edit unveränderten Prefix und einen womöglich betroffenen Suffix unterteilen. 78Da wir wissen welche Stelle im input-String von einem gegebenen edit betroffen ist können wir, anhand der Wirkung des Teilstücks bis zu jener Stelle, den output-String in einen durch den edit unveränderten Prefix und einen womöglich betroffenen Suffix unterteilen.
79Die Wirkung ab der betroffenen Stelle im input-String können wir also Komposition der Wirkung der durch den edit betroffenen Stelle und derer aller Zeichen danach bestimmen. 79Die Wirkung ab der betroffenen Stelle im input-String können wir also Komposition der Wirkung der durch den edit betroffenen Stelle und derer aller Zeichen danach bestimmen.
80Nun gilt es nur noch die Differenz (als `StringEdits`) des vorherigen Suffixes im output-String und des aus der gerade berechneten Wirkung Bestimmten zu bestimmen. 80Nun gilt es nur noch die Differenz (als `StringEdits`) des vorherigen Suffixes im output-String und des aus der gerade berechneten Wirkung Bestimmten zu bestimmen.
@@ -82,6 +82,8 @@ Nun gilt es nur noch die Differenz (als `StringEdits`) des vorherigen Suffixes i
82\begin{code} 82\begin{code}
83 83
84data DFSTAction state = DFSTBranch (Map state (state, String)) (DFSTAction state) (DFSTAction state) 84data DFSTAction state = DFSTBranch (Map state (state, String)) (DFSTAction state) (DFSTAction state)
85
86% TODO propL, Transduktor invertieren?
85 | DFSTLeaf 87 | DFSTLeaf
86 88
87dfstLens :: forall state. Ord state => DFST state -> EditLens (DFSTAction state) StringEdits StringEdits 89dfstLens :: forall state. Ord state => DFST state -> EditLens (DFSTAction state) StringEdits StringEdits