-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
4 changed files
with
14 additions
and
12 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,11 +1,12 @@ | ||
\englishabstract{% | ||
I transform a manual derivation technique known as the functional correspondence between evaluators and abstract machines into a robust algorithm. | ||
This thesis presents a robust algorithm for automatically deriving an abstract machine corresponding to a given interpreter. | ||
|
||
I begin by describing the classic formulation of the methodology consisting of two source-to-source human-aided transformations and characterize control-flow analysis as a basis for their algorithmization. | ||
I then define the meta-language \IDL{} and present the three main steps of the automatic procedure: transformation to administrative normal form, selective transformation to continuation-passing style and selective defunctionalization. | ||
I also derive a procedure for computing control-flow analysis of programs in \IDL{} using the abstracting abstract machines methodology. | ||
The transformation is based on a manual derivation technique known as the functional correspondence between evaluators and abstract machines which consists of two source code transformations: translation to continuation-passing style which uncovers the control flow of the interpreter and defunctionalization which produces a first-order program. | ||
|
||
The algorithm begins with the translation to administrative normal form which eases program analysis and the subsequent steps of the transformation: selective translation to continuation-passing style and selective defunctionalization. | ||
Both transformations extend their classical formulations with the ability to transform only the desired parts of the program by utilizing the control-flow analysis which is computed by an abstract interpreter obtained using the abstracting abstract machines methodology. | ||
|
||
The thesis is accompanied by an implementation of the algorithm in the form of a command-line tool. | ||
It allows for automatic transformation of an interpreter embedded in a \textit{Racket} source file and gives fine-grained control over the resulting machine. | ||
I present a selection of case-studies which showcase the performance of the tool and the algorithm by deriving both known and novel abstract machines. | ||
A selection of case-studies is presented to showcase the performance of the tool and the algorithm by deriving both known and novel abstract machines. | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,11 +1,12 @@ | ||
\polishabstract{% | ||
W pracy pokazuję jak przekształcić ręczną metodę derywacji, znaną jako odpowiedniość funkcyjna pomiędzy ewaluatorami i maszynami abstrakcyjnymi, w uniwersalny algorytm. | ||
W pracy przedstawiony jest algorytm pozwalający na automatyczną derywację maszyny abstrakcyjnej odpowiadającej źródłowemu interpreterowi. | ||
|
||
Zaczynając od klasycznego sformułowania metodologii, składającego się z dwóch transformacji kodu źródłowego wymagających pracy człowieka, wskazuję na analizę przepływu sterowania jako podstawę do ich algorytmizacji. | ||
Następnie definiuję meta-język \IDL{} i przedstawiam trzy główne etapy automatycznej procedury: transformację do adminstracyjnej postaci normalnej, wybiórczą transformację do stylu przekazywania kontynuacji oraz wybiórczą defunkcjonalizację. | ||
Pokazuję także procedurę pozwalającą na obliczenie analizy przepływu sterowania dla programów w \IDL{}, którą otrzymałem stosując metodologię abstrahowania maszyn abstrakcyjnych. | ||
Transformacja oparta jest na ręcznej metodzie derywacji znanej jako odpowiedniość funkcyjna pomiędzy ewaluatorami i maszynami abstrakcyjnymi, która składa się z dwóch transformacji kodu źródłowego: przekształcenia do stylu przekazywania kontynuacji ujawniającego przepływ sterowania w interpreterze oraz defunkcjonalizacji, która pozwala na uzyskanie pierwszorzędowego programu. | ||
|
||
Algorytm rozpoczyna się translacją do administracyjnej postaci normalnej która ułatwia analizę programu oraz dalsze przekształcenia: wybiórczą transformację do stylu przekazywania kontynuacji oraz wybiórczą defunkcjonalizację. | ||
Obie transformacje są rozszerzeniem klasycznych sformułowań i umożliwiają przekształcanie wybranych części programu dzięki zastosowaniu analizy przepływu sterowania, która jest obliczana za pomocą abstrakcyjnego interpretera otrzymanego z wykorzystaniem metodologii abstrahowania maszyn abstrakcyjnych. | ||
|
||
Do pracy dołączona jest implementacja algorytmu w postaci programu używanego z wiersza poleceń. | ||
Pozwala ona na automatyczną transformację interpretera zanużonego w pliku źródłowym w języku \textit{Racket}, jednocześnie zapewniając precyzyjną kontrolę nad kształtem wynikowej maszyny. | ||
W pracy przedstawiam zbiór przykładowych interpreterów na których obrazuję działanie narzędzia i algorytmu poprzez derywację zarówno znanych jak i nowych maszyn abstrakcyjnych. | ||
W pracy przedstawiono zbiór przykładowych interpreterów na których zobrazowano działanie narzędzia i algorytmu poprzez derywację zarówno znanych jak i nowych maszyn abstrakcyjnych. | ||
} |
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters