%PASTEX:FIGDIR=figs \documentclass[12pt,a4paper]{article} \usepackage[latin1]{inputenc} % 8 bits \usepackage[francais]{babel} % francais \usepackage{graphics} \usepackage{latexsym} \usepackage{here} \usepackage{color} %\input{commandes} %\input{algoenv} %\input{save_paper} \sloppy \title{LPP-v6 -- Notes D�veloppeur} \author{P.Raymond} \date{} \begin{document} \maketitle \tableofcontents %\clearpage \section{Ligne de commande et analyse syntaxique} \subsection{Fichiers accept�s} Les fichiers support�s sont~: \begin{itemize} \item Les fichiers \verb|foo.lus| � la syntaxe Lustre-v6 comportant un ensemble de d�clarations de packages et de modules. \item Les fichiers \verb|foo.lus| contenant uniquement un corps de package � la syntaxe v6~; un tel fichier est consid�r� comme la d�claration implicite d'un package dont le nom est \verb|foo|, et dont tous les items sont export�s (\verb|provided|). \end{itemize} Restrictions/� faire~: \begin{itemize} \item pour l'instant on prend un seul fichier, mais �a sera facilement adaptable \end{itemize} \subsection{Analyse syntaxique} Elle produit un ensemble de d�clarations de packages et de mod�les dans une structure syntaxique abstraite (module \verb|Syntaxe|), qui constitue le {\bf source brut}. \section{Analyse des d�clarations} C'est la premi�re phase de compilation qui consiste � v�rifier la coh�rences des d�claration modulo l'organisation en ``name-space'' (les packages). Cette phase produit une nouvelle version du source (module \verb|SrcTab|)~: \begin{itemize} \item unicit� des d�clarations de mod�les et de packages \item instanciation (purement syntaxique) des mod�les \item identification des items export�s et de leurs d�finitions abstraites (e.g. un type fourni par un package est pr�sent� abstrait pour les utilisation ext�rieures). \end{itemize} Au final on a une table de sources bien organis�e (\verb|SrcTab|) mais qui renvoie encore � des infos purement syntaxiques (\verb|Syntaxe|), voir figure~\ref{srctab}~: \begin{itemize} \item les trois tables d'export (const, type, oper) sont ind�x�es par des identificateurs absolus (pack+nom) et pointent sur des d�finitions �ventuellement abstraites~: c'est la seule vision qu'on en a de l'ext�rieur, et l'analyse doit �tre faite uniquement modulo cette info. \item la table des d�finitions de pack, chacun comportant ses tables d'items (const, type, oper)~; les idents sont relatifs et les d�finitions concr�tes. \end{itemize} \begin{figure} \begin{center} \input{srctab.pdf_t} \caption{La table des sources} \label{srctab} \end{center} \end{figure} \section{Compilation � la demande} Une compilation modulaire, package par package, est pratiquement impossible~: \begin{itemize} \item comment g�n�rer du code pour des n\oe uds param�tr�s ? \item comment faire du type-checking g�n�rique pour des tableaux dont on ne conna�t pas la taille ? \item et encore plus dur, comment traiter la r�cursivit� statique ? \end{itemize} La solution la plus raisonable semble de faire une compilation � la demande~: \begin{itemize} \item on part d'un n\oe ud principal � compiler, dont tous les �ventuels arguments statiques sont connus (en particulier la taille effective des tableaux manipul�s), \item on ``tire'' r�cursivement sur les d�pendances pour compiler tous les items n�cessaires � ce n\oe ud (�a comprend les types, les constantes statiques, les n\oe uds internes utilis�s). \end{itemize} \paragraph{Remarque.} Un point n'est pas tr�s clair~: est-il int�ressant de faire malgr�s tout une analyse pr�liminaire ind�pendante d'un main particulier~? Dans Lpp4x, c'est ce qu'on appelait le ``typage de surface''~: �a v�rifiait les r�f�rences, et faisait un typage approch�, o�, en particulier, la taille des tableaux �tait abstraite. \subsection{Items syntaxiques vers items effectifs} C'est la terminologie h�rit� de Lpp4x~: la compilation consiste � associer � des items syntaxiques (types, consts, nodes) des items effectifs (c'est-�-dire compil�s). \subsection{Compile Task} Pour impl�menter la compilation � la demande, on met en \oe uvre un m�canisme de ``t�ches de compilation''. Chaque t�che est identifi�e parfaitement par~: \begin{itemize} \item l'item � traiter (type, const, n\oe ud), \item le contextes (table de symboles) dans lequel on doit traiter. \end{itemize} Il faut bien diff�rencier~: \begin{itemize} \item la recherche d'infos {\em utilisateur} pour un item, \item la compilation effective de l'item. \end{itemize} Par exemple, la compilation d'un n\oe ud peut n�cessiter des infos sur un type dans le contexte de compilation de ce n\oe ud. Supposons qu'il s'agisse d'un type import� d'un package (soit \verb|Pa::ty|)~: \begin{itemize} \item on cheche l'info accessible sur le type depuis le contexte actuel~; supposons que le type soit laiss� abstrait dans la table provides de \verb|Pa|, la compilation du n\oe ud courant doit se faire avec cette seule info (\verb|Pa::ty| est un type abstrait), \item parall�lement, on stocke dans les t�ches de compilation � effectuer la compilation effective de \verb|Pa::ty|, dans le contexte du pack \verb|Pa|. \end{itemize} \end{document}