\myheading{Further reading}

There are several interesting open-source attempts to build decompiler.
Both source code and theses are interesting study.

\begin{itemize}
	\item \emph{decomp} by Jim Reuter\footnote{
			\url{http://www.program-transformation.org/Transform/DecompReadMe},
			\url{http://www.program-transformation.org/Transform/DecompDecompiler}}.

	\item \emph{DCC} by Cristina Cifuentes\footnote{
			\url{http://www.program-transformation.org/Transform/DccDecompiler},
			thesis: \url{https://yurichev.com/mirrors/DCC_decompilation_thesis.pdf}}.

		It is interesting that this decompiler supports only one type (\emph{int}).
		Maybe this is a reason why DCC decompiler produces source code with \emph{.B} extension?
		Read more about B typeless language (C predecessor): \url{https://yurichev.com/blog/typeless/}.

	\item \emph{Boomerang} by Mike Van Emmerik, Trent Waddington et al\footnote{
			\url{http://boomerang.sourceforge.net/},
			\url{http://www.program-transformation.org/Transform/MikeVanEmmerik},
			thesis: \url{https://yurichev.com/mirrors/vanEmmerik_ssa.pdf}}.
\end{itemize}

As I've mentioned, LISP knowledge can help to understand this all much easier.
Here is well-known micro-interpreter of LISP by Peter Norvig, also written in Python:
\url{https://web.archive.org/web/20161116133448/http://www.norvig.com/lispy.html},
\url{https://web.archive.org/web/20160305172301/http://norvig.com/lispy2.html}.

The gradual rewriting I've shown here is also available in Mathematica ("Trace" command):
\url{https://reference.wolfram.com/language/ref/Trace.html}.

I also enjoyed reading ``The Elements of Artificial Intelligence'' book by Steve Tanimoto
\footnote{\url{https://archive.org/details/TheElementsOfArtificialIntelligenceUsingLisp/}},
chapter 3: ``Production Systems and Pattern Matching''.

See also: Nuno Lopes -- Verifying Optimizations using SMT Solvers
\footnote{\url{https://llvm.org/devmtg/2013-11/slides/Lopes-SMT.pdf}}.
