diff options
author | Gregor Kleen <gkleen@yggdrasil.li> | 2017-10-24 21:31:06 +0200 |
---|---|---|
committer | Gregor Kleen <gkleen@yggdrasil.li> | 2017-10-24 21:31:06 +0200 |
commit | b83a8e228725d9ab1b37805bf440cbbf97aea6c0 (patch) | |
tree | 8364d0dc62f1a93f4b1e660b836fd1e02fc86228 | |
parent | 01747f4892099ae1ab2c9aaf4b0653fa4b2c4db3 (diff) | |
download | incremental-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-- | .gitignore | 3 | ||||
-rw-r--r-- | literature.md | 43 | ||||
-rw-r--r-- | literature.meta.yml.gup | 4 | ||||
-rw-r--r-- | literature/incremental-parsing.bibtex | 2 |
4 files changed, 36 insertions, 16 deletions
@@ -1,2 +1,3 @@ | |||
1 | literature.pdf | 1 | literature.pdf |
2 | literature.meta.yml \ No newline at end of file | 2 | literature.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 | ||
3 | Wir möchten inkrementelle Parser sowohl in ihrer algebraischen Struktur als auch | 3 | Wir möchten inkrementelle Parser sowohl in ihrer algebraischen Struktur als auch |
4 | in einer Implementierung in Haskell als edit-lenses auffassen. | 4 | in einer Implementierung in Haskell als edit-lenses (alá @hofmann2012edit) |
5 | auffassen. | ||
5 | 6 | ||
6 | Diese Implementierung soll inkrementelle Parser für reguläre- und | 7 | Unter einem inkrementellen Parser verstehen wir (analog zu |
8 | @ghezzi1979incremental) ein Programm, das, nach einem initialen Parsevorgang, | ||
9 | gegeben eine Spezifikation einer Änderung der textuellen Eingabe schneller ein | ||
10 | neues Ergebnis erzeugt als es ohne zusätzlichen Kontext möglich wäre | ||
11 | (gewöhnlicherweise in logarithmischer Zeit in der Länge der Eingabe). | ||
12 | Für die Darstellung als edit-lens erweitern wir diese Definition und fordern, | ||
13 | dass statt einem neuen Ergebnis eine Spezifikation einer Änderung am Ergebnis | ||
14 | erzeugt werden soll (das Anwenden dieser Änderung auf ein altes Ergebnis sollte | ||
15 | die Laufzeit nicht verschlechtern). | ||
16 | |||
17 | Unsere 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 | 22 | Parser 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 | |||
20 | Applikative parser mit lazy evaluation | 43 | Applikative 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" | |||
14 | typeset -a bibFiles | 14 | typeset -a bibFiles |
15 | bibFiles=(literature/**.bibtex) | 15 | bibFiles=(literature/**.bibtex) |
16 | 16 | ||
17 | # sha256sum ${bibFiles} >&2 | ||
18 | |||
19 | gup --contents <<<"${bibFiles}" | 17 | gup --contents <<<"${bibFiles}" |
20 | gup -u ${bibFiles} | ||
21 | |||
22 | for bibFile (${bibFiles}); do | 18 | for bibFile (${bibFiles}); do |
23 | printf " - %s\n" ${bibFile} | 19 | printf " - %s\n" ${bibFile} |
24 | done | 20 | done |
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.}, |