diff --git a/rapport.tex b/rapport.tex index 184776c250c0bbbe53ed1baa24433b34f2fe9267..d4c8a040c0e15b9971f331910ccacf89fbd47ce9 100644 --- a/rapport.tex +++ b/rapport.tex @@ -1,12 +1,14 @@ % !TeX spellcheck = <none> \documentclass[french]{article} +\usepackage{amsfonts} \usepackage{geometry} \usepackage[utf8]{inputenc} \usepackage[T1]{fontenc} \usepackage[french]{babel} \usepackage{translator} \usepackage{graphicx} +\usepackage[svgnames]{xcolor} \usepackage{lscape} \usepackage{tablefootnote} \usepackage{hyperref} @@ -28,10 +30,19 @@ \maketitle \tableofcontents + + \listoffigures \section{Vue globale de Polymalys-py} - + \section{Polymarp: Domaine abstrait} + + Le domaine abstrait est composé d'un domaine numérique relationnel, d'un \textit{mapping} de registres et d'un \textit{mapping} d'addresses. + + \subsection{Domaine numérique relationel} + + L'objectif de ce module est d'avoir une interface modulaire avec les librairies de manipulation de domaines numériques. Pour ce faire, on définit des classes abstraites dans \verb*|numerical.py|, pour lesquelles on créera des implémentation pour chaque librairie souhaitée. + \begin{figure}[h] \centering \resizebox{\textwidth}{!}{ @@ -143,7 +154,7 @@ + equals(other): bool } \umlclass[type=abstract, y=-28]{ApronNumericalWrapper}{}{ - + new\_var() \\ + + new\_var(ident: int): ApronVar \\ - npiv(): Set[PolyVar] \\ - linexpr(var, basis): List[ApronConstant] \\ \umlstatic{- \_get\_basis(dom1, dom2): Set[PolyVar]} \\ @@ -157,7 +168,7 @@ \umlinherit{ApronNumericalWrapper}{PolyNumericalWrapper} \umlclass[type=abstract, x=7, y=-22]{ApronPoly}{}{ - \umlstatic{+ bottom()} \\ + \umlstatic{+ bottom()} } \umlclass[x=7, y=-28]{ApronPolyWrapper}{}{} @@ -172,7 +183,57 @@ \end{tikzpicture} } - \caption{Hiérarchie des classes de l'interface mathématique et de son implémentation utilisant APRON} + \caption[Schéma UML de l'interface mathématique]{Hiérarchie des classes de l'interface mathématique et de son implémentation utilisant APRON} \end{figure} + \subsection{Mappings} + + Les \textit{mappings} sont définis dans \verb*|mappings.py|. Ils implémentent le \textit{mapping} de registres \( R \mapsto \mathcal{V}\) et le \textit{mapping} d'adresses \( \left(\mathcal{V} \times \mathbb{N} \times \mathcal{V} \right) \mapsto \mathcal{V} \cup \left(\mathcal{V} \times \mathcal{V} \right) \) + + \begin{figure}[h] + \centering + \resizebox{\textwidth}{!}{ + \begin{tikzpicture}%[show background grid] + \umlsimpleclass[x=8, y=-10]{PolyVar} + + \begin{umlpackage}{mappings} + \umlclass[type=interface, x=-2]{MappingMixin}{}{ + + \_\_contains\_\_(other): bool + } + + \umlclass[x=-4, y=-4]{RegisterMapping}{}{ + + replace(old, new) + } + \umlclass[y=-4]{LoopMapping}{}{ + + replace(old, new) + } + \umlclass[x=8, y=-5]{Avatar}{}{} + \umlclass[x=0, y = -7]{SLP}{ + + base: PolyVar \\ + + step: int or None \\ + + count: PolyVar + }{ + + last(): PolyExpr + } + + \umluniassoc[mult2=2, pos2=0.9]{Avatar}{PolyVar} + \umlassoc[geometry=-|-, weight=0.8, name=assoc]{SLP}{Avatar} + \umlassoc[geometry=-|-, weight=0.8]{SLP}{PolyVar} + \umlassocclass[x=4, y=-4]{AddressMapping}{assoc-1}{}{ + + replace(old, new) + } + + \umlsimpleclass[x=2.2, text=DarkGreen]{dict} + + \umlinherit{RegisterMapping}{dict} + \umlinherit{LoopMapping}{dict} + \umlinherit{AddressMapping}{dict} + \umlimpl{RegisterMapping}{MappingMixin} + \umlimpl{LoopMapping}{MappingMixin} + \umlimpl{AddressMapping}{MappingMixin} + \end{umlpackage} + \end{tikzpicture} + } + \caption[Schéma UML des mappings]{Hiérarchies des classes de mappings} + \end{figure} \end{document}