% !TEX encoding = UTF-8
% !TEX spellcheck = en_GB
% !TEX root = paper.tex
\documentclass[a4paper,twoside]{report}

\usepackage[spanish,catalan,english]{babel}
\usepackage[utf8]{inputenc}
\usepackage{listings}
\usepackage{algorithm}
\usepackage{algorithmic}
\renewcommand{\algorithmicrequire}{\textbf{Input:}}
\renewcommand{\algorithmicensure}{\textbf{Output:}}
\usepackage{amsthm}
\usepackage{amssymb}
\theoremstyle{definition}
\newtheorem{definition}{Definition}
\newtheorem{example}{Example}
\newtheorem{problem}{Problem}
\usepackage{hyperref}
\usepackage{graphics}
\usepackage{title/mitssTitle}

\newcommand{\ctrldep}{\rightarrow^{ctrl}}
\newcommand{\datadep}{\rightarrow^{data}}

\usepackage{todonotes}
\usepackage{marginnote}

\newif\ifpaperVersion
%\paperVersiontrue
\paperVersionfalse
\ifpaperVersion
	% Paper version
	\newcommand{\ignore}[1]{}
	\newcommand{\deleted}[1]{}
	\newcommand{\added}[1]{#1}
	\newcommand{\pending}[1]{}
	\newcommand{\done}[1]{}
	\newcommand{\doubt}[1]{}
	\newcommand{\josep}[1]{}
	\newcommand{\carlos}[1]{}
	\newcommand{\sergio}[1]{}
\else
	% Working
	\definecolor{ignoreColor}{rgb}{1,0.5,0}
	\definecolor{pendingColor}{rgb}{0.2,0.7,0.2}
	\definecolor{doneColor}{rgb}{0.7,0.2,0.7}
	\definecolor{doubtColor}{rgb}{0.6,0.6,0.4}
	\definecolor{josepColor}{rgb}{0.2,0.6,0.6}
	\definecolor{carlosColor}{rgb}{0.6,0.2,0.6}
	\definecolor{sergioColor}{rgb}{1.0,0.5,0.0}

	\newcommand{\ignore}[1]{\textcolor{ignoreColor}{\#Ignored: #1}}
	\newcommand{\deleted}[1]{\textcolor{red}{\#Deleted: #1}}
	\newcommand{\added}[1]{\textcolor{blue}{\#Added: #1}}
	\newcommand{\pending}[1]{\textcolor{pendingColor}{\#Pending: #1}}
	\newcommand{\done}[1]{\textcolor{doneColor}{\#Done: #1}}
	\newcommand{\doubt}[1]{\textcolor{doubtColor}{\#Doubt: #1}}
	\newcommand{\josep}[1]{\textcolor{josepColor}{\#JJJ: #1}}
	\newcommand{\carlos}[1]{\textcolor{carlosColor}{\#CCC: #1}}
	\newcommand{\sergio}[1]{\textcolor{sergioColor}{\#SSS: #1}}
\fi

\title{Fragmentación de programas con excepciones}
%\title{Program slicing with exceptions}
\author{Carlos S. Galindo Jiménez}
\date{diciembre de 2019}
\supervisor{Josep Francesc Silva Galiana}
\curso{2019-2020}

\begin{document}
\algsetup{linenodelimiter=.}
\include{listings-config}
\maketitle

\cleardoublepage

\begin{abstract}
	Program slicing is an analysis technique that can be applied to practically all programming languages. However, in the presence of exception handling, current program slicing software has a precision problem. This project tackles the problem of program slicing with exception handling, analysing the problem from a general perspective (for any kind of exception system), but focusing our efforts in the object-oriented paradigm, specifically the Java language. The solution is still general enough to be applicable to other paradigms and programming languages.
	
	In this thesis, we study the currently available solutions to the problem, and we propose a generalization that includes at least the \texttt{try-catch} and \texttt{throw} statements. The solution we propose produces slices that guarantee completeness and are as correct as possible. The implementation of the technique proposed will be in Java.


\end{abstract}

\selectlanguage{spanish}
\begin{abstract}
	La fragmentación de programas es una técnica de análisis que se aplica en prácticamente todos los lenguajes de programación. Sin embargo, en presencia de excepciones los fragmentadores actuales tienen problemas de precisión. En este proyecto se aborda el problema de la fragmentación de programas con excepciones, analizando el problema desde una perspectiva general (para cualquier tipo de excepción), pero focalizando la implementación en el paradigma orientado a objetos, concretamente en el lenguaje Java.

Se estudiarán las soluciones actuales al problema y se propondrá una generalización que al menos incluya las construcciones try-catch y Throws. La solución propuesta deberá producir fragmentos que garanticen la completitud y que sean lo más precisos posible. La implementación de la técnica propuesta se hará en Java.
\end{abstract}

\selectlanguage{catalan}
\begin{abstract}
	La fragmentaçió de programmaris és una tècnica d'anàlisis que s'aplica en pràcticamente tots els llenguatges de programació. 
\end{abstract}

\selectlanguage{english}

\tableofcontents

\include{Secciones/motivation}
\include{Secciones/background}
\include{Secciones/incremental_slicing}
\include{Secciones/problem_solution}
\include{Secciones/state_of_the_art}
\include{Secciones/conclusion}

% \chapter{TODO}

% \begin{itemize}
% 	\item \carlos{} Decide whether to use dependency or \textbf{dependence} (I suspect the plural form would also change: dependencies vs. dependences). DONE
% 	\item \carlos{} Ver si hay espacios antes/despues de los m-dash. Josep ha visto que no hay espacios. DONE
% 	\item \carlos{} Cambiar criterio de slicing de (line n, variable x) a $\langle n, x \rangle$. DONE
% 	\item \carlos{} Figure, Example, Definition always uppercase. DONE
% 	\item \carlos{} w.r.t. always without spaces. DONE
% 	\item \carlos{} Do not use the same number for different methods.
% 	\item \carlos{} Use et al. for multiple authors.
% 	\item \carlos{} All instructions are statements, even \texttt{catch}, \texttt{try} and \texttt{finally}.
% 	\item \carlos{} i.e. (es decir), e.g. (por ejemplo)
% \end{itemize}

\bibliographystyle{plain}
\bibliography{../../../../../../Biblio/biblio.bib}

\end{document}

% vim: set noexpandtab:ts=2:sw=2:wrap
