\documentclass[a4paper]{article} \usepackage[english]{babel} \usepackage{geometry} \usepackage[hidelinks]{hyperref} \usepackage{natbib} \title{High-level code processing in a functional style} \author{Camil Staps} \begin{document} \maketitle \begin{abstract} As the tools provided by programming languages become more abstract and semantically complex, it becomes necessary to have systems that can reason about these programming languages on a high abstraction level. Functional languages can aid interpreter and compiler designers: abstraction is trivial, and in addition to that the use of a functional language makes it easier to prove properties about programs. By means of a case study, an interpreter of the language While \citep{proganal}, the advantages of functional languages for code processing are shown. \end{abstract} \section{Introduction} Compilers and interpreters are among the most complex pieces of software written to date. Due to the rapid technological development of the last decades, programming languages have become semantically so complex, that it is impossible for a programmer to keep in mind the impact of changes on generated machine code. This led to the \emph{assumption problem}: developers constantly rely on assumptions about how the language that they write in works. Intuitive semantics may change over time, however, and we cannot found a world relying so principally on software as ours on contingent assumptions. Algol 60 was the first language of which the semantics were precisely documented \citep{algol}. Its report is the primary link between Algol programmers and the compiler designers, clarifying the language for the first and specifying it for the second. These kind of specifications were the first solution to the assumption problem. However, programming languages have evolved significantly since Algol 60, and semantical specifications have become increasingly complex. Whereas the assumption problem has been solved on the programmer's side, it has now occurred on the compiler designer's side: the specification has become too mathematically complex to efficiently translate it into imperative code, and writing a correct compiler or interpreter is no longer trivial. Functional programming languages offer writers of code processing systems tools to efficiently implement semantical specifications. Using a higher level of abstraction, the gap between specification and implementation is closed, allowing for quicker correctness checks and better maintainable code. The connections between functional languages and mathematics let us \emph{prove} properties about code processing systems (for example, their correctness with respect to a specification). \bibliographystyle{jfp} \bibliography{paper} \end{document}