summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGregor Kleen <gkleen@yggdrasil.li>2017-10-24 21:31:06 +0200
committerGregor Kleen <gkleen@yggdrasil.li>2017-10-24 21:31:06 +0200
commitb83a8e228725d9ab1b37805bf440cbbf97aea6c0 (patch)
tree8364d0dc62f1a93f4b1e660b836fd1e02fc86228
parent01747f4892099ae1ab2c9aaf4b0653fa4b2c4db3 (diff)
downloadincremental-dfsts-b83a8e228725d9ab1b37805bf440cbbf97aea6c0.tar
incremental-dfsts-b83a8e228725d9ab1b37805bf440cbbf97aea6c0.tar.gz
incremental-dfsts-b83a8e228725d9ab1b37805bf440cbbf97aea6c0.tar.bz2
incremental-dfsts-b83a8e228725d9ab1b37805bf440cbbf97aea6c0.tar.xz
incremental-dfsts-b83a8e228725d9ab1b37805bf440cbbf97aea6c0.zip
Discuss Incremental Analysis of Real Programming Languages
-rw-r--r--.gitignore3
-rw-r--r--literature.md43
-rw-r--r--literature.meta.yml.gup4
-rw-r--r--literature/incremental-parsing.bibtex2
4 files changed, 36 insertions, 16 deletions
diff --git a/.gitignore b/.gitignore
index bb009ce..670b81f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,3 @@
1literature.pdf 1literature.pdf
2literature.meta.yml \ No newline at end of file 2literature.meta.yml
3**/.gup
diff --git a/literature.md b/literature.md
index 9e4f27e..6b18905 100644
--- a/literature.md
+++ b/literature.md
@@ -1,22 +1,45 @@
1# Thema 1# Thema
2 2
3Wir möchten inkrementelle Parser sowohl in ihrer algebraischen Struktur als auch 3Wir möchten inkrementelle Parser sowohl in ihrer algebraischen Struktur als auch
4in einer Implementierung in Haskell als edit-lenses auffassen. 4in einer Implementierung in Haskell als edit-lenses (alá @hofmann2012edit)
5auffassen.
5 6
6Diese Implementierung soll inkrementelle Parser für reguläre- und 7Unter einem inkrementellen Parser verstehen wir (analog zu
8@ghezzi1979incremental) ein Programm, das, nach einem initialen Parsevorgang,
9gegeben eine Spezifikation einer Änderung der textuellen Eingabe schneller ein
10neues Ergebnis erzeugt als es ohne zusätzlichen Kontext möglich wäre
11(gewöhnlicherweise in logarithmischer Zeit in der Länge der Eingabe).
12Für die Darstellung als edit-lens erweitern wir diese Definition und fordern,
13dass statt einem neuen Ergebnis eine Spezifikation einer Änderung am Ergebnis
14erzeugt werden soll (das Anwenden dieser Änderung auf ein altes Ergebnis sollte
15die Laufzeit nicht verschlechtern).
16
17Unsere Implementierung soll inkrementelle Parser für reguläre- und
7$LL(1)$-Sprachen sowie für Fragmente von Java und XML bereitstellen. 18$LL(1)$-Sprachen sowie für Fragmente von Java und XML bereitstellen.
8 19
9# Bekannte Ergebnisse 20# Bekannte Ergebnisse
10 21
11$LL(1)$-Parser 22Parser für kontextfreie Grammatiken
12 ~ @wagner1998efficient haben bereits einen inkrementellen $LL(1)$-Parser mit dem 23 ~ @wagner1998efficient haben einen inkrementellen $LL(1)$-Parser mit dem
13 gewünschten Laufzeitverhalten vorgestellt. 24 gewünschten Laufzeitverhalten vorgestellt.
14 25
15 Dies deckt unsere DEA- und Klammerungs-Beispiele ab, nicht jedoch z.B. XML. 26 Für allgemeine kontextfreie Grammatiken haben @wagner1997incremental eine
16 Zudem planen wir unsere Beispiele möglichst deklarativ (z.B. in 27 Herangehensweise entwicklet, die Mehrdeutigkeiten direkt im Ergebnis
17 idiomatischem Haskell) statt imperativ (@wagner1998efficient verwenden C++) 28 kodiert.
18 zu formulieren. 29 Hierbei wird das gewünschte Laufzeitverhalten in den meisten
19 30 Anwendungsfällen (z.B. C und C++) erreicht (das worst-case Verhalten ist
31 natürlich exponentiell).
32
33 Wir betrachten auch Beispiele die zwar nicht $LL(1)$ sind jedoch trotzdem
34 eindeutig geparst werden können (z.B. valides XML) und planen nicht
35 nondeterminismus im Parse-Vorgang zu erlauben.
36 Durch die Darstellung unserer Parser planen wir Änderungen in der Eingabe in
37 Änderungen in der Ausgabe zu übersetzen, statt, wie in den referenzierten
38 Arbeiten, in eine bereits neu konstruierte Ausgabe.
39 Zudem planen wir unsere Beispiele möglichst deklarativ (in idiomatischem
40 Haskell) statt imperativ (die referenzierten Arbeiten verwenden C++) zu
41 formulieren.
42
20Applikative parser mit lazy evaluation 43Applikative parser mit lazy evaluation
21 ~ @bernardy2009lazy beschreibt eine Implementierung applikativer Parser (alá 44 ~ @bernardy2009lazy beschreibt eine Implementierung applikativer Parser (alá
22 @swierstra2001combinator) die noch während dem parse-Vorgang Resultate 45 @swierstra2001combinator) die noch während dem parse-Vorgang Resultate
diff --git a/literature.meta.yml.gup b/literature.meta.yml.gup
index dc8e95d..a4c0d42 100644
--- a/literature.meta.yml.gup
+++ b/literature.meta.yml.gup
@@ -14,11 +14,7 @@ printf "bibliography:\n"
14typeset -a bibFiles 14typeset -a bibFiles
15bibFiles=(literature/**.bibtex) 15bibFiles=(literature/**.bibtex)
16 16
17# sha256sum ${bibFiles} >&2
18
19gup --contents <<<"${bibFiles}" 17gup --contents <<<"${bibFiles}"
20gup -u ${bibFiles}
21
22for bibFile (${bibFiles}); do 18for bibFile (${bibFiles}); do
23 printf " - %s\n" ${bibFile} 19 printf " - %s\n" ${bibFile}
24done 20done
diff --git a/literature/incremental-parsing.bibtex b/literature/incremental-parsing.bibtex
index 96ec6c4..e3e5758 100644
--- a/literature/incremental-parsing.bibtex
+++ b/literature/incremental-parsing.bibtex
@@ -1,4 +1,4 @@
1@article{Ghezzi:1979:IP:357062.357066, 1@article{ghezzi1979incremental,
2 author = {Ghezzi, Carlo and Mandrioli, Dino}, 2 author = {Ghezzi, Carlo and Mandrioli, Dino},
3 title = {Incremental Parsing}, 3 title = {Incremental Parsing},
4 journal = {ACM Trans. Program. Lang. Syst.}, 4 journal = {ACM Trans. Program. Lang. Syst.},