\documentclass{article}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage[pdftex]{graphicx}
\usepackage{amsmath, amsfonts, amssymb, amsthm}
\usepackage{fullpage}
\usepackage[inline]{enumitem}
\usepackage{hyperref}

\title{Rapport du projet de compilation \\ Umons 2024-2025}
\author{Debucquoy Anthony}

\begin{document}

\maketitle

\newpage

\tableofcontents

\newpage

\section*{Préface}

Ce document retrace le dévelopement d'un compilateur de \textit{\textbf{S}imple \textbf{P}rogramme
en \textbf{F}rançais} dans le cadre du projet de compilation de L'\textit{Universitée de Mons}.

Ce projet est supposé être un projet de groupe. Mais lorsque les consignes du projets été données,
J'ai rapidement voulu me faire une idée de l'ampleur de celui-çi en tentant une première version.
En restant sur ma lancée je suis arrivé très rapidement à un résultat satisfesant à mes yeux et
pratiquement fonctionnelle (non exampt de bugs évidement). J'ai alors fait la demande à \textit{Mr.
DECAN Alexandre} notre assistant et la personne référente du projet.
Celui-çi m'a confirmé que je pourrais accomplir se projet par moi même.

\section{Consigne}

Il nous est demandé de déveloper un interpreteur pour le language \textbf{SPF}, un language de
programmation \textit{faiblement et statiquement typé} dans lequel les instructions sont en
français.

Voici une liste semi-exhaustive de ce qui nous est demandé.

\begin{itemize}
	\item Une ligne commençant par le character \verb|#| sont ignorés
	\item Une instruction se termine par le character \verb|;|
	\item les types suivant doivent être implémentés:
		\begin{enumerate*}
		\item \verb|entier| 
		\item \verb|texte|
		\item \verb|liste|
		\item \verb|booléen|
		\end{enumerate*}
	\item une déclaration est de la forme \verb|<type> <nom>;| ou \verb|<type> <nom> = <expression>;|
	\item une assignation est de la forme \verb|<nom> = <expression;|
	\item Les noms de variables peuvent contenir des accents
	\item Il est possible de créer une liste d'éléments consécutive avec \verb|[a:b]| où a et b sont
		les bornes de la liste 
\end{itemize}

Le language contient également de nombreux opérateurs qui ne sont pas listés exhaustivement dans ce
document car sont similaires à la pluspart des languages. Il est cependant à noté que les mots sont
traduit de l'anglasi au français. Par example, \verb|true| deviens \verb|vrai| en SPF.

On remarque également que l'accés à la liste commence avec un indice de 1. Ainsi l'accés au deuxième
élément de la liste l (\verb|liste l = [a, b, c];|) devrat être éffectué à l'aide de l'expression
\verb|l[2]| et retournera la variable \verb|b|

L'ajout d'élément dauns une liste se fait à l'aide de l'instruction\\
\verb|ajouter <expression> dans <variable>|

L'affichage d'une expression à l'écrant se fait à l'aide de l'instruction \\\
\verb|afficher <expression> (, <expression> ...);|

Finallement, les boucle \verb|for| sont semblables à celle en python avec comme syntaxe \\
\verb|<type> <variable> dans <expression> faire{...}|

On remarquera aussi que pour les variables initiés dans les tests et boucles sont limités à leurs
portée.


\section{Grammaire}

% – Une description de la grammaire implémentée et des points sensibles
% la concernant;

\section{Approche}

% – Une explication de votre approche pour gérer :
% ∗Les variables, leur déclaration, leur type et l’affichage via --trace;
% ∗Le test conditionnel de la forme si/sinon;
% ∗La boucle tant que;
% ∗La boucle pour chaque, incluant la gestion de la variable tempo-
% raire.

\section{Erreurs}

% – Une description brève des erreurs connues et des solutions envisagées;

\section{Difficultés}

% – Une brève présentation des difficultés rencontrées et des solutions
% implémentées/envisagées;

\section{Utilisation de l'IA}

Lorsque je travaille pour apprendre je ne souhaite en général pas utiliser d'IA dans le but de me
former mieux. Il m'arrive plus d'utiliser cet outils dans le but de me faciliter la tache pour un
travail fastidieux que je suis certains de savoir faire et dont je peux vérifier la fiabilitée par
moi même.

Ceci dis, lors de l'élaboration de ce projet je me suis vu utiliser l'IA à un moment. J'ai tenté de
donner ma grammaire déjà ecrite à chatgpt (modèle GPT-4o à travers https://duck.ai/) en lui
demandant de me générer une série de programme utilisant ce language qui pourraient me servir de
test. L'objectif est d'avoir plus d'examples de programmes que ceux données par la consigne.

Néamoins après très peu de temps je me suis ravisé et ai simplement ignoré la réponse donnée car les
proposition de programmes étaient bien trop simple et ne tentaient pas du tout de "piéger" mon
implémentation.

Pour être tout à fait claire, c'est la seule et unique utilisation de l'ia que j'ai faite jusqu'à
maintenant mais je compte utiliser LanguageTool à la fin de la rédaction de ce rapport pour m'aider
à coriger les évantuelles fautes commises dans ce document.

\section{Répartition du travail}

Comme précisé dans la préface de ce document, je me suis chargé de l'intégralité du projet. J'ai
commencé par me faire la main avec la librairie proposée (lark) par le tutoriel du parser json.
Ensuite le projet s'est très vite mis en place. Plusieurs révisions ont été nécéssaire pour faire
correspondre le projet aux attentes, vous pouvez les consulter dans l'historique du repo git à
l'adresse \url{https://git.herisson.ovh/tonitch/compilation}


\end{document}

