diff --git a/RapportStage.tex b/RapportStage.tex index f3c28de..0d9e812 100644 --- a/RapportStage.tex +++ b/RapportStage.tex @@ -32,8 +32,9 @@ Dans cette section, je vais rappeler quelques notations et définitions du langage Featherweight Java \cite{fjdef}. Le lecteur souhaitant toutes les définitions complètes devra lire \cite[Section 1]{fjdef}. - On utilisera la notation du sur-lignage afin d'indiquer une liste finie d'élément. - Par exemple, on notera $f(\overline{a})$ pour indiquer un appel de la forme $f(a_1,a_2,\dots,a_n)$. + On utilisera la notation du sur-lignage afin d'indiquer une liste finie d'éléments. + Par exemple, on aura la notation + \[f(\overline{a})\quad\equiv\quad f(a_1,a_2,\dots,a_n)\] Tout d'abord, on rappelle la grammaire des expressions, qui seront souvent notées $e$, $e_k$ ou $e'$, qui est la suivante: @@ -49,7 +50,7 @@ \end{center} où \fj{x} est un nom de variable, \fj{C} un nom de classe, \fj{f} un nom d'attribut de classe et \fj{m} un nom de méthode de classe. - On dit d'une expression qui ne contient pas de noms de variable (\autoref{rule:expr:variable}) qu'elle est \emph{fermée}. Dans la suite du document, nous allons utiliser le terme \enquote{expression} pour désigner les expressions fermées. Les expressions quelconques seront désignées par \emph{expressions ouvertes} ou \emph{expressions à variables}, parfois notées $h$. + On dit d'une expression qui ne contient pas de référence à des variables (\autoref{rule:expr:variable}) qu'elle est \emph{fermée}. Dans la suite du document, nous allons utiliser le terme \enquote{expression} pour désigner les expressions fermées. Les expressions quelconques seront désignées par \emph{expressions ouvertes} ou \emph{expressions à variables}, parfois notées $h$. Nous allons ausssi noter $\alpha$,$\beta$,$\varepsilon$,$\gamma$ les \eng{mappings} d'un ensemble de noms de variables vers un ensemble d'expressions fermées. On va ainsi définir la complétion d'une expression à variables par un de ces \eng{mappings}, ce qui sera noté $h\bracket{\alpha}$ où l'on remplace chaque occurrence d'une variable par l'image par $\alpha$ de ce nom de variable. @@ -65,14 +66,13 @@ La relation de réduction dépend de la \eng{class table} $\mathcal{A}$ utilisée. On la notera $\rightarrow_\mathcal{A}$ ou simplement $\rightarrow$ si il n'y a pas d’ambigüité. On notera aussi $\rightarrow^*_\mathcal{A}$ ou $\rightarrow^*$ la cloture transitive et réflexive de la relation. On notera enfin $e\Downarrow v$ lorsque $e \rightarrow^* v$ et $v$ est une valeur. On pourra même écrire $e \Downarrow$ pour dire $\exists v \quad e \Downarrow v$. - Cette relation est définie avec deux types de règles ( - \cite[Fig.3]{fjdef}, les règles de type \textsc{R} qui indiquent : + Cette relation est définie avec deux types de règles \cite[Fig.3]{fjdef}, les règles de type \textsc{R} qui indiquent : \begin{itemize} \item L'évaluation d'un attribut d'un objet (\textsc{R-Field}) \item L'évaluation d'une méthode (\textsc{R-Invk}) \item L'évaluation d'un cast (\textsc{R-Cast}) \end{itemize} - L'autre type sont les règles de type \textsc{RC} qui sont les règles de \enquote{congruence}, permettant l'évaluation dans n'importe quelle sous-expression. + Et les règles de type \textsc{RC} qui sont les règles de \enquote{congruence}, permettant l'évaluation dans n'importe quelle sous-expression. Enfin, nous reprenons la définition de la classe \fj{Paire} issue du papier original, reproduite \autoref{fig:pairedef} @@ -108,7 +108,7 @@ La seconde classe est \fj{Int}, liée à des objets notés \fj{0}, \fj{1}, \fj{2}, \dots. Cette classe met a disposition une méthode \fj{Bool isZero()} qui renvoie \fj{true} si l'objet appelant est zéro, et renvoie \fj{false} sinon. Plusieurs méthodes sont définies en sus dans la définition complète présentée en \autoref{anx:moreclass} permettant de manipuler ces objets.%TODO Vérifier qu'elles le soient - Aussi, nous définirons souvent implicitement les classes \fj{A}, \fj{B} et \fj{C}, qui n'ont pas d'attributs ni de méthode (ce sont des \enquote{objets simples}). + Aussi, nous définirons souvent implicitement les classes \fj{A}, \fj{B} et \fj{C}, qui n'ont pas d'attribut et pas de méthode (ce sont des \enquote{objets simples}). \subsection{Extension de Featherweight Java} \marginpar{Voir pour enlever cette section si pas assez utilisée}