Compilation. Introduction à la compilation. Termes Phases d'un compilateur Importance des grammaires Méthodes d'analyse. Termes. Termes.
|
|
|
- Suzanne Lheureux
- il y a 10 ans
- Total affichages :
Transcription
1 Compilation Enseignants : Stéphane Talbot Miguel Tomasena Volume horaire : 10.5 C / 12 TD / 12 TP langage source Traduction langage cible Contenu : Introduction à la compilation Analyse Lexicale Analyse Syntaxique Analyse Sémantique Production de code Optimisation 1 2 Références : Compilers : Principles, Techniques and Tools (dragon book). Alfred V. Aho, Ravi Sethi, Jeffrey. D. Ullman, Addison-Wesley, 2ème édition Programming Language processors in Java. D. Watt & D. Brown, Prentice-Hall, Cours de compilation. Luc Maranget. Sur le Web. JFlex - The Fast Scanner Generator for Java. Sur le Web. CUP Parser Generator for Java. Sur le Web. Compilation Introduction à la compilation Phases d'un compilateur Importance des grammaires Méthodes d'analyse 3 4 Compilateur : programme qui traduit d'un langage source vers un langage cible, en signalant d éventuelles erreurs Terminologie : La Syntaxe régit la forme, la structure d'une phrase. Exemple : if (35 ==9) print ("bravo ") Deux niveaux syntaxiques peuvent être cités : Lexique : forme des symboles terminaux (les mots) Syntaxique : forme d une suite de terminaux 5 La compilation concerne : Langages informatiques Architecture de machines Théorie des langages Algorithmique 6 La Sémantique régit la signification. Exemple d erreur sémantique : if (3 == false) print ("bravo ")
2 Interpréteur : interpréter c est parcourir un graphe (structure de données) dont les nœuds sont les instructions. Un interprète exécute lui même les instruction du programme. Compilateur : Un compilateur est un traducteur qui permet de transformer un programme écrit dans un langage L1 (source) en un autre programme écrit dans L2 (cible). L1 L2 7 Les langages interprétés sont souvent plus simples et flexibles que les langages compilés. Exemples de langages interprétées : JavaScript, PHP, BASIC, scheme, CaML, LISP, Perl, Python, Prolog. 8 L2 peut être un langage intermédiaire, assembleur ou un langage d une machine abstraite. Exemples de langages compilés : C, C, ADA, Pascal, Java. Le P-code concerne à la fois la compilation et l interprétation Le code source est traduit (compilé) dans une forme binaire compacte (pseudo-code ou p-code) qui n'est pas encore du code machine. Lors de l exécution le P-code est interprété. Objectifs d'un Compilateur Qu attend-on d un compilateur? La correction : le programme compilé doit représenter le même calcul que le programme original. Il est équivalent. Par exemple en Java le source est compilé pour obtenir un fichier (.class) "byte code" qui sera interprété par une machine virtuelle. L efficacité : le compilateur doit produire un code qui s exécutera aussi rapidement que possible. Les interpréteurs de P-code peuvent être relativement petits et rapides, le P-code peut s'exécuter presque aussi rapidement que du binaire Objectifs d'un Compilateur Qu attend-on d un compilateur? La détection des erreurs. Exemples d'erreurs : Identificateurs mal formés, commentaires non fermés Constructions syntaxiques incorrectes Identificateurs non déclarés Expressions mal typées : if 3 then "toto" else 4.5 Références non instanciées Erreurs de Syntaxe. Erreurs détectées à la compilation, de nature statique. Ecriture d'un compilateur : Bootstrap L écriture d un compilateur est une tâche complexe, le programmeur a intérêt à utiliser un langage de haut niveau. La plupart des compilateurs sont écrits en langage de haut niveau et non en assembleur. Si on ne dispose pas d un langage de haut niveau, alors la stratégie de «programme amorce» (bootstrap) peut s appliquer. 11 Erreurs d'exécution. Erreurs détectées à l exécution, de nature dynamiques (division par zéro, dépassement des bornes d'un tableau, etc). 12
3 Bootstrap Stratégie de bootstrap. Si on veut un compilateur de L, on écrit d abord un compilateur pour le sous-ensemble L avec l assembleur M. Compilation T-diagramme schématisant un traducteur de L vers M réalisé en M : L M M Phases d'un compilateur Le compilateur ainsi réalisé servira à la construction d un compilateur de L. L M L L M M Résultat L M M Phases d'un compilateur : langage source Analyse lexicale Structure d un compilateur Analyse syntaxique Analyse sémantique Génération de code langage cible Structure d un compilateur Analyse sémantique : analyse l arbre de syntaxe abstraite pour calculer de nouvelles informations permettant de : Rejeter des programmes incorrects (portée, typage ) Préparer la phase de génération de code (organisation de l environnement, construction de la table de symboles, résolution de la surcharge ) 15 Analyse lexicale : traduit une suite de caractères en suite de mots, tokens, ou unités lexicales. Analyse syntaxique (ou grammaticale) : transforme une suite d'unités lexicales en un arbre représentant la structure de la phrase. Gestion de la table des symboles Arbre de syntaxe abstraite : Structure intermédiaire avant l'analyse sémantique. Représente les dépendances sémantiques. 16 Génération de code : transformation l'arbre syntaxique abstrait enrichi d'informations sémantiques en code machine ou assembleur. Choix des instructions à émettre. Allocation de registres : association entre les idéntifiants et les registres du processeur. Optimisation. Exemple : let p = i v * 60 Analyse lexicale consiste à identifier les tokens ou unités lexicales. Token Unité lexicale let mot clé position identificateur (id1) = affectation initial identificateur (id2) addition vitesse identificateur (id3) produit 60 entier Table de symboles. Le compilateur doit garder trace des noms de variables et les information correspondantes : mémoire réservée, type, portée, pour les sous-programmes : nombre et type des paramètres, mode de transmission de chacun, type du résultat. let p = i v * 60 Table de symboles Adresse Symbole Informations id1 p int id2 i int id3 v int
4 let Analyse syntaxique (parser) vérifie que l ordre des unités lexicales correspond au langage (à sa grammaire) et produit un arbre syntaxique (de dérivation). let p = i v * 60 IDENT p = terme IDENT i opbin terme IDENT LET IDENT '=' opbin * nb 60 Arbre de dérivation :vs: arbre abstrait L arbre de dérivation produit par l analyse syntaxique possède de nombreux nœuds superflus. La grammaire peut comporter de règles dont le but est de simplifier l analyse syntaxique. Un arbre abstrait constitue une structure plus naturelle entre l analyse syntaxique et l analyse sémantique, il ne garde que les parties nécessaires. L arbre abstrait peut se construire lors de l analyse syntaxique, en associant à toute règle de la grammaire une action sémantique. Ou bien à partir de l'arbre de dérivation. 19 v 20 Arbre abstrait i, v i, sont v sont des déjà entiers précédemment initialisées (déclarés) affectation p i * let p = i v * 60 Les types sont cohérent v 60 Génération de code intermédiaire. Description d'une machine à registres : 8 registres (eax, ebx, ecx, edx, epb, esp, eflags, eip) : eax, ebx, ecx, edx sont des registres généraux : ebp et esp servent à gérer la pile (base et sommet de la pile). eflags registre d état. eip pointeur d instruction. 21 Analyse sémantique : Résolution des noms. Construction d'une table des symboles en associant des étiquettes aux identifiants. Vérification de la cohérence de types. Vérification des initialisations. Certains compilateurs signalent comme erreur la non-affectation initiale d'une variable locale. 22 Instructions de la forme : op dest,source op dest op Qqs instructions : add, sub, mul, div, mov, push, pop, jmp, jl, etc. 23 Code généré, exemple : DATA SEGMENT p DD i DD i v DD let p = i v * 60 DATA v DD ENDS déclaration Instructions de données précédentes. DATA CODE ENDS SEGMENT On mets i dans la pile * CODE... SEGMENT...,i mov eax,i eax,v mov eax,v eax,60 multiplication mov,60 ebx push eax pop mul ebx eax,ebx pop eax mul eax,ebx pop ebx affectation add eax, ebx mov p, eax CODE ENDS v Optimisation. Il existe une grande diversité de types d'optimisation. Par exemple, dans le code précédent, il est inutile d'empiler pour dépiler par la suite : pop ebx add eax, ebx mov p, eax pop ebx add eax, ebx mov p, eax
5 Autre phases de compilation Préprocesseur. Transformations sur un code source, avant la compilation. Prise en compte de macros (#define) et des inclusions de fichiers (#include). Assembleur. Certain compilateurs produisent du code en langage d assembleur. Il faut donc produire du code machine "translatable". Chargeur. Le code "translatable" est modifié à absolu et placé en mémoire aux emplacements appropriés. Relieur (éditeur des liens). Il permet de constituer un programme unique à partir de plusieurs fichiers contenant du code "translatable". Partie frontale ou d Analyse. Phases qui dépendent du langage source : lexicale, syntaxique. Partie finale ou de Synthèse. Phases qui dépendent de la machine cible. langage source Regroupement de phases Partie frontale (analyse) code intermédiaire Partie finale (synthèse) --> On peut être amené a écrire seulement une de ces deux parties. Passes : nombre de lectures du fichier source (une en général). Compromis entre nombre de passes et la mémoire nécessaire. langage cible Compilation Importance des grammaires Partie frontale d un compilateur Description d un langage source : Syntaxe : grammaire non contextuelle. Sémantique : descriptions plus ou moins formelles ou des exemples. Une grammaire non contextuelle permet de : Spécifier la syntaxe Guider la traduction : traduction dirigée par la syntaxe. Très utile pour organiser la partie frontale. La traduction dirigée par la syntaxe est une combinaison d un analyseur syntaxique et d un générateur de code intermédiaire Expression suite de caractères 29 Analyse lexicale Grammaire suite d unités lexicales Traduction dirigée par la syntaxe Représentation intermédiaire L ensemble de phrases syntaxiquement correctes d un langage est décrit par une grammaire. Une grammaire est un quadruplet G = (V T,V N, S 0, P) où V T est l ensemble de symboles terminaux (unités lexicales), V N est l ensemble de symboles non terminaux, S 0 V N est l axiome ou symbole de départ, P est l ensemble de productions (règles de grammaire) de la forme 30 Grammaire Une phrase générée par la grammaire G est obtenue en partant du symbole initial et en appliquant des productions P jusqu'à l'obtention des terminaux. Le langage L(G) est l ensemble de toutes les phrases que l on peut générer avec G. Formellement, on écrit : L(G) = { w V t * S 0 * w } Exemple V T = {il, elle, est, boit, vite, beau} V N = {<pronom>, <verbe>, <adj>, <phrase>} S 0 = <phrase> P = { <phrase> <pronom> <verbe> <adj>, <pronom> il elle, <verbe> est boit, <adj> vite beau } Rmq : certaines phrases n ont pas de sens (il boit beau)
6 31 Grammaire Hiérarchie des grammaires (Chomsky). type nom grammaire 3 régulières ou rationnelle 2 non contextuelle ou algébrique forme des règles A wb A w structures produites exemple typique modèle équivalent peignes a n automate fini A arbres a n b n réseau de transition récursif 1 contextuelle A a n b n c n existe mais compliqué 0 générale quelconque machines de Turing où Voir l'exemple précédant A et B sont des non terminaux Exercice : écrire les grammaires w est un terminal et les automates correspondants, et sont des séquences de terminaux ou non terminaux et ε 32 Exemple de notation : <bloc> begin <liste_opt_instr> end <liste_opt_instr> <liste_instr> Chaîne vide <liste_instr> <liste_instr> ; <intr> <intr> dérivation :- application de plusieurs productions successives Arbre syntaxique (ou de dérivation) Illustre la manière dont l axiome se dérive en une chaîne du langage. Représentation graphique d une suite de dérivations Propriétés d un Arbre syntaxique : 1. La racine est étiquetée par l axiome 2. Chaque feuille est étiquetée par un terminal (u.lexicale) ou par 3. Chaque nœud intérieur est étiqueté par un non-terminal 4. Si A est le non-terminal d un nœud et ses fils sont X1,.., Xn alors A X1,..,Xn est une production 33 Grammaire ambiguë : s'il existe plus d'un arbre pour une même phrase. Dans la compilation on besoin de grammaires non ambigües (ou des règles pour résoudre l ambigüité). On peut être amené à réécrire une grammaire pour éviter les ambigüités. Exemple de grammaire ambiguë : Arbres pour Règles pour résoudre l ambiguïté : 1. Associativité des opérateurs : convention d'évaluation Associativité à gauche Associativité à droite Ex d'opérateurs :, -, *, / Ex d'opérateurs : =, **, &&, Règle associative à gauche : <> <> <chiffre> <chiffre> <chiffre> <> <chiffre> 9 <> <> <chiffre> 5 <chiffre> 2 Règle associative à droite : <affect> <lettre> = <affect> <lettre> <lettre> a b c z <affect> <lettre> = a <lettre> b <affect> = <affect> <lettre> c 35 Règles pour résoudre l ambiguïté : 2. Priorité des opérateurs : convention d'évaluation. 9 5 * 2 s'évalue 9 (5 * 2) On dit que * a une priorité supérieure à car il 'applique avant. 36 Démarche de la construction d'une grammaire non ambiguë des essions arithmétiques : 1. On définit une table synthétisant l'associativité et la priorité des opérateurs : l'ordre correspond associativité à gauche : - à la priorité associativité à gauche : * / 2. On introduit deux non-terminaux <> et <terme> correspondant aux deux niveaux de priorité. 3. On introduit un autre non-terminal <factor> pour les unités de base (impossible à éclater) : chiffres et essions parenthèses. Résultat : <> <> <terme> <> - <terme> <terme> <terme> <terme> * <factor> <terme> / <factor> <facteur> <factor> <chiffre> (<>) Arbre syntaxique 9 5 * 2??
7 Exercice à faire en cours Exercice écrire une grammaire pour un sous-ensemble des instructions Java : et <instrs>. Remarques : Considérez 7 types de : affectation, deux conditionnels, while, do while, bloc d'instructions et instruction vide ( ). La définition de repose sur :, <instrs>,<bool> et <> Terminaux : id if else while do = ; ( ) { } Le point-virgule doit apparaître à la fin des productions qui ne finissent pas par. La définition de <instrs> (liste de instructions) repose sur : <instrs> et if La grammaire précédente est ambiguë à cause du conditionnel. if (<bool>) else if (<bool>) autres instructions L'instruction if (estx) if (esty) a=x; else a=y; admet deux arbres syntaxiques : ( <bool> ) estx else if ( <bool> ) esty estx if ( <bool> ) if ( <bool>) else esty Ré-écriture de la grammaire pour enlever l'ambiguïté : <instr_close> <instr_non_close> <instr_non_close> if (<bool>) if (<bool>) <instr_close> else <instr_non_close> <instr_close> if (<bool>) <instr_close> else <instr_close> autres instructions L'instruction if (estx) if (esty) a=x; else a=y; admet un arbre syntaxique : <instr_non_close> if ( <bool> ) estx <instr_close> if ( <bool> ) <instr_close> else <instr_close> esty 40 La traduction dirigée par la syntaxe est réalisée en attachant des règles (ou programmes) à des productions. Exemple : <> <1> <terme> traduire <> peut se faire avec le pseudo-code suivant : traduire 1; reconnaître "" traduire terme; traiter addition; Le pseudo-code peut servir à construire un arbre abstrait pour, ou bien pour un traitement plus simple comme par exemple la traduction en postfix. Un Attribut : information associée aux unités (nœuds) syntaxiques. Par exemple : chaîne de caractères; valeur, adresse mémoire, etc. Une production peut avoir un ensemble de règles ou actions sémantiques pour calculer la valeur des attributs. X.a dénote la valeur de l'attribut a du nœud X. Deux manières d'associer les règles ou actions sémantiques à la grammaire : 1. Définition dirigée par la syntaxe : chaque production est accompagné d'une règle sémantique. 2. Schémas de traduction : on insère des instruction (programmes) à l'intérieur des productions. On parle d'actions sémantiques. On dit que l'attribut est synthétisé quand la valeur remonte (est calculée) à partir des attributs fils. On parle d'attribut hérité dans le cas contraire, quand la valeur provienne des nœuds ancêtres
8 43 1. Définition dirigée par la syntaxe. Chaque production est accompagné d'une règle sémantique. Exemple traduire une ession en postfixe : concaténation Production Règle sémantique <> <1> <terme>.t = 1.t terme.t "" <> <1> - <terme>.t = 1.t terme.t "-" <> <terme>.t = terme.t <terme> <terme1> * <factor> terme.t = terme1.t facteur.t "*" <terme> <terme1> / <factor> terme.t = terme1.t facteur.t "/" <terme> <factor> terme.t = facteur.t <factor> (<>) facteur.t =.t <factor> 0 facteur.t = "0" <factor> 1 facteur.t = "1" 44 L'arbre "décoré" est l'arbre syntaxique représentant explicitement les valeurs des attributs pour chaque nœud. L'arbre "décoré" correspondant à l'analyse de 9 2 * 4 facteur.t = "9".t = "9" terme.t = "9" facteur.t = "9" 9.t = "9 2 4 * " terme.t = "2" * facteur.t = "2" terme.t = "2 4 *" Les règles sémantiques ont été évaluées en faisant un parcours en profondeur d'abord. On évalue après avoir visité tous les fils. Les attributs sont synthétisés 2 terme.t = terme1.t facteur.t "*" facteur.t = "4" 4 2. Schémas de traduction. On insère des programmes (actions sémantiques) à l'intérieur des productions. 45 Similaire à une définition dirigée par la syntaxe, excepté que l'ordre d'évaluation des actions sémantiques est donné explicitement. Par la suite on utilisera des schémas de traduction. Exemple : <reste> --> <terme> {print("")} <reste1> Arbre syntaxique correspondant au schéma de traduction : reste terme {print("")} reste1 action sémantique Schémas de traduction pour traduire vers postfixe : 46 Production <> <1> <terme> {print("")} <> <1> - <terme> {print("-")} <> <terme> <terme> <terme1> * <factor> {print("*")} <terme> <terme1> / <factor> {print("/")} <terme> <factor> <factor> (<>) <factor> 0 {print("0")} <factor> 1 {print("1")} Appliquez le schéma de traduction à l'ession : 9 2 * 4 Compilation Méthodes d'analyse Analyse syntaxique descendante Deux méthodes d'analyse : Descendante : programmation facile, on part de l'axiome (racine) Ascendante : s'applique à des grammaires plus générales. Des outils logiciels tendent à utiliser des méthodes ascendantes. Analyse descendante. On commence par l'axiome, en réalisant de manière répétitive les deux étapes suivantes : 1. Au nœud n, étiqueté par un non-terminal A, choisir une production de A et construire les fils de n avec les symboles de la partie droite de la production. Choisir selon le symbole de prévision 2. Choisir le prochain nœud où un sous-arbre doit être construit Choisir le nœud le plus à gauche : dérivation gauche
9 49 Analyse syntaxique descendante Exemple d'application de l'analyse descendante : Sous-ensemble d'instructions de Java. id = <> ; if (<>) while (<bool>) Pour certaines grammaires, les étapes peuvent être appliquées sans avoir besoin de faire des retour-arrière (de manière déterministe). Au cours de l'analyse, le terminal d'entrée courant est appelé symbole de pré-vision. 50 Entrée while (i<=6) a=a1; Arbre Analyse syntaxique descendante Exemple de chaîne d'entrée : while (i<=6) a=a1; Au départ, le terminal while est le symbole de pré-vision. <inst> <inst> while ( <bool> ) <intr> while <bool> while (<bool>) Si le symbole de pré-vision nous signale une seule production possible, alors on peut appliquer une analyse syntaxique prédictive sans besoin de retour-arrière. ou Analyse Descendante Déterministe 51 } Analyse syntaxique prédictive Une procédure est associée à chaque non terminal. Le symbole de pré-vision (previs) permet de sélectionner de manière définitive la production à appliquer. Pseudo-code : public void instr() { switch (previs){ case ID : id = <> ; if (<>) while (<bool>) <> ; accepter(id); accepter(affect); ( ); accepter(pv); break; case IF : accepter(if); accepter(pg); (); accepter(pd); instr(); break; case WHILE : accepter(while); accepter(pg); bool(); accepter(pd); instr(); break; case : break; // autres instructions case default : print("erreur syntaxe"); ID, AFFECT, PV, IF, PG, PD, WHILE } sont des terminaux, des unités lexicales Analyse syntaxique prédictive Suite pseudo-code : 52 public void accepter(terminal t) { if (previs == t) previs = unitesuivante(); // appel analyse lexical else print("erreur syntaxe"); } Définition PREMIER( ) = ensemble des terminaux pouvant apparaître au début d une dérivation de. Exemples : PREMIER(instr) = {id, if, while, } PREMIER() = {id, chiffre,...} Analyse syntaxique prédictive S'il existe plus d'une production pour un nœud A, par exemple A et A. On choisi d'appliquer A si : 1. a PREMIER( ) où a est le symbole de pré-vision et 2. PREMIER( ) PREMIER( ) = Associativité gauche Récursivité à gauche. Notez la production suivante <> <> <terme> Une analyse syntaxique prédictive ne peut pas s'appliquer à une telle production. Dans ce cas il faut ré-écrire la production pour éliminer la récursivité à gauche. L'analyse syntaxique prédictive sera abordée plus en détail dans le chapitre Analyse Syntaxique 53
Chap 4: Analyse syntaxique. Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 1
Chap 4: Analyse syntaxique 1 III- L'analyse syntaxique: 1- Le rôle d'un analyseur syntaxique 2- Grammaires non contextuelles 3- Ecriture d'une grammaire 4- Les méthodes d'analyse 5- L'analyse LL(1) 6-
INTRODUCTION A JAVA. Fichier en langage machine Exécutable
INTRODUCTION A JAVA JAVA est un langage orienté-objet pur. Il ressemble beaucoup à C++ au niveau de la syntaxe. En revanche, ces deux langages sont très différents dans leur structure (organisation du
Programmation assembleur : aperçu
Assembleur : Younès EL AMRANI. 1 Programmation assembleur : aperçu Programmation en assembleur : NASM Module M14 Semestre 4 Printemps 2010 Equipe pédagogique : Younès El Amrani, Abdelhakim El Imrani, Faissal
Compilation (INF 564)
Présentation du cours Le processeur MIPS Programmation du MIPS 1 Compilation (INF 564) Introduction & architecture MIPS François Pottier 10 décembre 2014 Présentation du cours Le processeur MIPS Programmation
Évaluation et implémentation des langages
Évaluation et implémentation des langages Les langages de programmation et le processus de programmation Critères de conception et d évaluation des langages de programmation Les fondations de l implémentation
Les structures de données. Rajae El Ouazzani
Les structures de données Rajae El Ouazzani Les arbres 2 1- Définition de l arborescence Une arborescence est une collection de nœuds reliés entre eux par des arcs. La collection peut être vide, cad l
Cours 1 : La compilation
/38 Interprétation des programmes Cours 1 : La compilation Yann Régis-Gianas [email protected] PPS - Université Denis Diderot Paris 7 2/38 Qu est-ce que la compilation? Vous avez tous déjà
Structure d un programme
Architecture des ordinateurs Cours 6 Structure d un programme 3 décembre 2012 Archi 1/30 Programme en Assembleur Archi 2/30 Sections de données programme en assembleur = fichier texte (extension.asm) organisé
Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if
Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if Pierre Boudes 28 septembre 2011 This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike
INITIATION AU LANGAGE C SUR PIC DE MICROSHIP
COURS PROGRAMMATION INITIATION AU LANGAGE C SUR MICROCONTROLEUR PIC page 1 / 7 INITIATION AU LANGAGE C SUR PIC DE MICROSHIP I. Historique du langage C 1972 : naissance du C dans les laboratoires BELL par
Architecture des ordinateurs
Architecture des ordinateurs Cours 7 17 décembre 2012 Archi 1/1 Fonctions, suite et fin Archi 2/1 Rappel Forme générale d un sous-programme (fonction) : etiquette sousprogramme: push ebp ; empile la valeur
Machines virtuelles. Brique ASC. Samuel Tardieu [email protected]. Samuel Tardieu (ENST) Machines virtuelles 1 / 40
Machines virtuelles Brique ASC Samuel Tardieu [email protected] École Nationale Supérieure des Télécommunications Samuel Tardieu (ENST) Machines virtuelles 1 / 40 Machines virtuelles La compilation peut
UE Programmation Impérative Licence 2ème Année 2014 2015
UE Programmation Impérative Licence 2 ème Année 2014 2015 Informations pratiques Équipe Pédagogique Florence Cloppet Neilze Dorta Nicolas Loménie [email protected] 2 Programmation Impérative
Licence ST Université Claude Bernard Lyon I LIF1 : Algorithmique et Programmation C Bases du langage C 1 Conclusion de la dernière fois Introduction de l algorithmique générale pour permettre de traiter
EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE
EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE QCM Remarque : - A une question correspond au moins 1 réponse juste - Cocher la ou les bonnes réponses Barème : - Une bonne réponse = +1 - Pas de réponse = 0
TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile
TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile Dans ce TP, vous apprendrez à définir le type abstrait Pile, à le programmer en Java à l aide d une interface
Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java
Info0101 Intro. à l'algorithmique et à la programmation Cours 3 Le langage Java Pierre Delisle, Cyril Rabat et Christophe Jaillet Université de Reims Champagne-Ardenne Département de Mathématiques et Informatique
Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme
Rappel Ralf Treinen Université Paris Diderot UFR Informatique Laboratoire Preuves, Programmes et Systèmes [email protected] 6 mai 2015 Jusqu'à maintenant : un petit langage de programmation
Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application
Université de Provence Licence Math-Info Première Année V. Phan Luong Algorithmique et Programmation en Python Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application 1 Ordinateur Un
Cours de Programmation 2
Cours de Programmation 2 Programmation à moyenne et large échelle 1. Programmation modulaire 2. Programmation orientée objet 3. Programmation concurrente, distribuée 4. Programmation monadique 5. Les programmes
Cours d Algorithmique et de Langage C 2005 - v 3.0
Cours d Algorithmique et de Langage C 2005 - v 3.0 Bob CORDEAU [email protected] Mesures Physiques IUT d Orsay 15 mai 2006 Avant-propos Avant-propos Ce cours en libre accès repose sur trois partis pris
Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre 2009. [email protected]
. Cours intensif Java 1er cours: de C à Java Septembre 2009 Enrica DUCHI LIAFA, Paris 7 [email protected] LANGAGES DE PROGRAMMATION Pour exécuter un algorithme sur un ordinateur il faut le
Programmation Web. Madalina Croitoru IUT Montpellier
Programmation Web Madalina Croitoru IUT Montpellier Organisation du cours 4 semaines 4 ½ h / semaine: 2heures cours 3 ½ heures TP Notation: continue interrogation cours + rendu à la fin de chaque séance
Cours 1 : Qu est-ce que la programmation?
1/65 Introduction à la programmation Cours 1 : Qu est-ce que la programmation? Yann Régis-Gianas [email protected] Université Paris Diderot Paris 7 2/65 1. Sortez un appareil qui peut se rendre
Théorie de la Programmation
Théorie de la Programmation http://perso.ens-lyon.fr/daniel.hirschkoff/thpr hop Programmation, Théorie de la programmation Langages de programmation I il existe de nombreux langages de programmation I
Conception de circuits numériques et architecture des ordinateurs
Conception de circuits numériques et architecture des ordinateurs Frédéric Pétrot Année universitaire 2014-2015 Structure du cours C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 Codage des nombres en base 2, logique
Logiciel de base. Première année ENSIMAG
Logiciel de base Première année ENSIMAG 1 Procédures, paramètres, pile En assembleur une fonction est une étiquette, c'est l'adresse de sa première instruction Lors de l'appel d'une fonction, la pile sert
ACTIVITÉ DE PROGRAMMATION
ACTIVITÉ DE PROGRAMMATION The purpose of the Implementation Process is to realize a specified system element. ISO/IEC 12207 Sébastien Adam Une introduction 2 Introduction Ø Contenu Utilité de l ordinateur,
Logiciel Libre Cours 2 Fondements: Programmation
Logiciel Libre Cours 2 Fondements: Programmation Stefano Zacchiroli [email protected] Laboratoire PPS, Université Paris Diderot 2013 2014 URL http://upsilon.cc/zack/teaching/1314/freesoftware/
Formula Negator, Outil de négation de formule.
Formula Negator, Outil de négation de formule. Aymerick Savary 1,2, Mathieu Lassale 1,2, Jean-Louis Lanet 1 et Marc Frappier 2 1 Université de Limoges 2 Université de Sherbrooke Résumé. Cet article présente
Représentation d un entier en base b
Représentation d un entier en base b 13 octobre 2012 1 Prérequis Les bases de la programmation en langage sont supposées avoir été travaillées L écriture en base b d un entier est ainsi défini à partir
Théorie des Langages
Théorie des Langages Analyse syntaxique descendante Claude Moulin Université de Technologie de Compiègne Printemps 2010 Sommaire 1 Principe 2 Premiers 3 Suivants 4 Analyse 5 Grammaire LL(1) Exemple : Grammaire
SSTIC 2009. Désobfuscation automatique de binaires. Alexandre Gazet. Yoann Guillot. Et autres idyles bucoliques...
Désobfuscation automatique de binaires Et autres idyles bucoliques... Alexandre Gazet Sogeti / ESEC R&D alexandre.gazet(at)sogeti.com Yoann Guillot Sogeti / ESEC R&D yoann.guillot(at)sogeti.com SSTIC 2009
Traduction des Langages : Le Compilateur Micro Java
BARABZAN Jean-René OUAHAB Karim TUCITO David 2A IMA Traduction des Langages : Le Compilateur Micro Java µ Page 1 Introduction Le but de ce projet est d écrire en JAVA un compilateur Micro-Java générant
Utilisation de l analyse statique comme outil d aide au développement. par. Yves Gauthier
Utilisation de l analyse statique comme outil d aide au développement par Yves Gauthier essai présenté au Département d'informatique en vue de l'obtention du grade de maître en technologies de l information
IN 102 - Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C
IN 102 - Cours 1 Qu on le veuille ou non, les systèmes informatisés sont désormais omniprésents. Même si ne vous destinez pas à l informatique, vous avez de très grandes chances d y être confrontés en
Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java
Langages objets Introduction M2 Pro CCI, Informatique Emmanuel Waller, LRI, Orsay présentation du module logistique 12 blocs de 4h + 1 bloc 2h = 50h 1h15 cours, 45mn exercices table, 2h TD machine page
Arbres binaires de recherche
1 arbre des comparaisons 2 recherche dichotomique l'arbre est recalculé à chaque recherche 2 5 3 4 7 9 1 6 1 2 3 4 5 6 7 9 10 conserver la structure d'arbre au lieu de la reconstruire arbre binaire de
OCL - Object Constraint Language
OCL - Object Constraint Language Laëtitia Matignon [email protected] Département Informatique - Polytech Lyon Université Claude Bernard Lyon 1 2012-2013 Laëtitia Matignon SIMA - OCL - Object
Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions
Cours d introduction à l informatique Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions Qu est-ce qu un Une recette de cuisine algorithme? Protocole expérimental
3. SPÉCIFICATIONS DU LOGICIEL. de l'expression des besoins à la conception. Spécifications fonctionnelles Analyse fonctionnelle et méthodes
PLAN CYCLE DE VIE D'UN LOGICIEL EXPRESSION DES BESOINS SPÉCIFICATIONS DU LOGICIEL CONCEPTION DU LOGICIEL LA PROGRAMMATION TESTS ET MISE AU POINT DOCUMENTATION CONCLUSION C.Crochepeyre Génie Logiciel Diapason
Plan. Exemple: Application bancaire. Introduction. OCL Object Constraint Language Le langage de contraintes d'uml
OCL Object Constraint Language Le langage de contraintes d'uml Plan 1. Introduction 2. Les principaux concepts d'ocl Object Constraint Language 1 Object Constraint Language 2 Exemple: une application bancaire
Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère
L'héritage et le polymorphisme en Java Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère En java, toutes les classes sont dérivée de la
CH.6 Propriétés des langages non contextuels
CH.6 Propriétés des langages non contetuels 6.1 Le lemme de pompage 6.2 Les propriétés de fermeture 6.3 Les problèmes de décidabilité 6.4 Les langages non contetuels déterministes utomates ch6 1 6.1 Le
Cours No 3 : Identificateurs, Fonctions, Premières Structures de contrôle.
Université Montpellier-II UFR des Sciences - Département Informatique - Licence Informatique UE GLIN302 - Programmation Applicative et Récursive Cours No 3 : Identificateurs, Fonctions, Premières Structures
Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples
Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation impérative et structures de données simples Introduction au langage C Sandrine Blazy - 1ère année 24 octobre 2007 Cours d Algorithmique-Programmation
Initiation à l algorithmique
Informatique S1 Initiation à l algorithmique procédures et fonctions 2. Appel d une fonction Jacques TISSEAU Ecole Nationale d Ingénieurs de Brest Technopôle Brest-Iroise CS 73862-29238 Brest cedex 3 -
Gestion mémoire et Représentation intermédiaire
Gestion mémoire et Représentation intermédiaire Pablo de Oliveira March 23, 2015 I Gestion Memoire Variables locales Les variables locales sont stockées: Soit dans un registre,
Machines virtuelles Cours 1 : Introduction
Machines virtuelles Cours 1 : Introduction Pierre Letouzey 1 [email protected] PPS - Université Denis Diderot Paris 7 janvier 2012 1. Merci à Y. Régis-Gianas pour les transparents Qu est-ce qu une
Génie Logiciel avec Ada. 4 février 2013
Génie Logiciel 4 février 2013 Plan I. Généralités II. Structures linéaires III. Exceptions IV. Structures arborescentes V. Dictionnaires I. Principes II. Notions propres à la POO I. Principes Chapitre
Programmer en JAVA. par Tama ([email protected]( [email protected])
Programmer en JAVA par Tama ([email protected]( [email protected]) Plan 1. Présentation de Java 2. Les bases du langage 3. Concepts avancés 4. Documentation 5. Index des mots-clés 6. Les erreurs fréquentes
Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test
Grandes lignes Analyseur Statique de logiciels Temps RÉel Embarqués École Polytechnique École Normale Supérieure Mercredi 18 juillet 2005 1 Présentation d 2 Cadre théorique de l interprétation abstraite
Conception. Génie Logiciel. Renaud Marlet. LaBRI / INRIA http://www.labri.fr/~marlet. (d'après A.-M. Hugues) màj 17/04/2007
1 Génie Logiciel (d'après A.-M. Hugues) Conception Renaud Marlet LaBRI / INRIA http://www.labri.fr/~marlet màj 17/04/2007 2 Position dans le cycle de vie Contexte : étant donnée une spécification (ce que
Architecture des ordinateurs : Programmation des processeurs avec l'environnement «y86» (INF155)
Architecture des ordinateurs : Programmation des processeurs avec l'environnement «y86» (INF155) F. Pellegrini Université Bordeaux 1 Ce document est copiable et distribuable librement et gratuitement à
Java Licence Professionnelle CISII, 2009-10
Java Licence Professionnelle CISII, 2009-10 Cours 4 : Programmation structurée (c) http://www.loria.fr/~tabbone/cours.html 1 Principe - Les méthodes sont structurées en blocs par les structures de la programmation
TP 1. Prise en main du langage Python
TP. Prise en main du langage Python Cette année nous travaillerons avec le langage Python version 3. ; nous utiliserons l environnement de développement IDLE. Étape 0. Dans votre espace personnel, créer
DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51
DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51 PLAN DU COURS Introduction au langage C Notions de compilation Variables, types, constantes, tableaux, opérateurs Entrées sorties de base Structures de
Institut Supérieure Aux Etudes Technologiques De Nabeul. Département Informatique
Institut Supérieure Aux Etudes Technologiques De Nabeul Département Informatique Support de Programmation Java Préparé par Mlle Imene Sghaier 2006-2007 Chapitre 1 Introduction au langage de programmation
Recherche dans un tableau
Chapitre 3 Recherche dans un tableau 3.1 Introduction 3.1.1 Tranche On appelle tranche de tableau, la donnée d'un tableau t et de deux indices a et b. On note cette tranche t.(a..b). Exemple 3.1 : 3 6
Travaux pratiques. Compression en codage de Huffman. 1.3. Organisation d un projet de programmation
Université de Savoie Module ETRS711 Travaux pratiques Compression en codage de Huffman 1. Organisation du projet 1.1. Objectifs Le but de ce projet est d'écrire un programme permettant de compresser des
Notions fondamentales du langage C# Version 1.0
Notions fondamentales du langage C# Version 1.0 Z 2 [Notions fondamentales du langage Csharp] [Date : 25/03/09] Sommaire 1 Tout ce qu il faut savoir pour bien commencer... 3 1.1 Qu est ce qu un langage
Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie
Chapitre I : Les bases du C++ Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie du logiciel, et ce depuis
Métriques de performance pour les algorithmes et programmes parallèles
Métriques de performance pour les algorithmes et programmes parallèles 11 18 nov. 2002 Cette section est basée tout d abord sur la référence suivante (manuel suggéré mais non obligatoire) : R. Miller and
UE C avancé cours 1: introduction et révisions
Introduction Types Structures de contrôle Exemple UE C avancé cours 1: introduction et révisions Jean-Lou Desbarbieux et Stéphane Doncieux UMPC 2004/2005 Introduction Types Structures de contrôle Exemple
Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :
Algorithmique et programmation : STRUCTURES DE DONNÉES A. Structure et enregistrement 1) Définition et rôle des structures de données en programmation 1.1) Définition : En informatique, une structure de
Claude Delannoy. 3 e édition C++
Claude Delannoy 3 e édition Exercices Exercices C++ en en langage langage delc++ titre 4/07/07 15:19 Page 2 Exercices en langage C++ AUX EDITIONS EYROLLES Du même auteur C. Delannoy. Apprendre le C++.
Introduction au langage C
Introduction au langage C Cours 1: Opérations de base et premier programme Alexis Lechervy Alexis Lechervy (UNICAEN) Introduction au langage C 1 / 23 Les premiers pas Sommaire 1 Les premiers pas 2 Les
Architecture des ordinateurs TD1 - Portes logiques et premiers circuits
Architecture des ordinateurs TD1 - Portes logiques et premiers circuits 1 Rappel : un peu de logique Exercice 1.1 Remplir la table de vérité suivante : a b a + b ab a + b ab a b 0 0 0 1 1 0 1 1 Exercice
Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004
Questionnaire d'examen final INF1101 Sigle du cours Nom : Signature : Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004 Professeur(s)
Rappels sur les suites - Algorithme
DERNIÈRE IMPRESSION LE 14 septembre 2015 à 12:36 Rappels sur les suites - Algorithme Table des matières 1 Suite : généralités 2 1.1 Déition................................. 2 1.2 Exemples de suites............................
Éléments de programmation et introduction à Java
Éléments de programmation et introduction à Java Jean-Baptiste Vioix ([email protected]) IUT de Dijon-Auxerre - LE2I http://jb.vioix.free.fr 1-20 Les différents langages informatiques
programmation S initier à la la Avec des exemples en C, C++, C#, Java et PHP Avec des exemples en C, C++, C#, Java et PHP Claude Delannoy
Claude Delannoy S initier à la la programmation Avec des exemples en Avec des exemples en C, C++, C#, Java et PHP C, C++, C#, Java et PHP S initier à la programmation Avec des exemples en C, C++, C#, Java
1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.
1. Structure d un programme C Un programme est un ensemble de fonctions. La fonction "main" constitue le point d entrée pour l exécution. Un exemple simple : #include int main() { printf ( this
Structure d un programme et Compilation Notions de classe et d objet Syntaxe
Cours1 Structure d un programme et Compilation Notions de classe et d objet Syntaxe POO 1 Programmation Orientée Objet Un ensemble d objet qui communiquent Pourquoi POO Conception abstraction sur les types
Déroulement. Evaluation. Préambule. Définition. Définition. Algorithmes et structures de données 28/09/2009
Déroulement Algorithmes et structures de données Cours 1 et 2 Patrick Reuter http://www.labri.fr/~preuter/asd2009 CM mercredi de 8h00 à 9h00 (Amphi Bât. E, 3 ème étage) ED - Groupe 3 : mercredi, 10h30
Cours de Master Recherche
Cours de Master Recherche Spécialité CODE : Résolution de problèmes combinatoires Christine Solnon LIRIS, UMR 5205 CNRS / Université Lyon 1 2007 Rappel du plan du cours 16 heures de cours 1 - Introduction
Annexe : La Programmation Informatique
GLOSSAIRE Table des matières La Programmation...2 Les langages de programmation...2 Java...2 La programmation orientée objet...2 Classe et Objet...3 API et Bibliothèque Logicielle...3 Environnement de
Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars 2014. http://homepages.laas.fr/matthieu/cours/java/java.pdf
Introduction à Java Matthieu Herrb CNRS-LAAS http://homepages.laas.fr/matthieu/cours/java/java.pdf Mars 2014 Plan 1 Concepts 2 Éléments du langage 3 Classes et objets 4 Packages 2/28 Histoire et motivations
Chapitre I Notions de base et outils de travail
Chapitre I Notions de base et outils de travail Objectifs Connaître les principes fondateurs et l historique du langage Java S informer des principales caractéristiques du langage Java Connaître l environnement
Langage et Concepts de ProgrammationOrientée-Objet 1 / 40
Déroulement du cours Introduction Concepts Java Remarques Langage et Concepts de Programmation Orientée-Objet Gauthier Picard École Nationale Supérieure des Mines de Saint-Étienne [email protected]
Bases de programmation. Cours 5. Structurer les données
Bases de programmation. Cours 5. Structurer les données Pierre Boudes 1 er décembre 2014 This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License. Types char et
Interpréteur d algèbre relationnelle
Universite de Mons-Hainaut Faculté des Sciences Interpréteur d algèbre relationnelle Olivier Christiaen UMH-LIG1 Directeur du projet : M. Jef Wijsen Année académique 2003-2004 Première licence en informatique
LES TYPES DE DONNÉES DU LANGAGE PASCAL
LES TYPES DE DONNÉES DU LANGAGE PASCAL 75 LES TYPES DE DONNÉES DU LANGAGE PASCAL CHAPITRE 4 OBJECTIFS PRÉSENTER LES NOTIONS D ÉTIQUETTE, DE CONS- TANTE ET DE IABLE DANS LE CONTEXTE DU LAN- GAGE PASCAL.
Conventions d écriture et outils de mise au point
Logiciel de base Première année par alternance Responsable : Christophe Rippert [email protected] Introduction Conventions d écriture et outils de mise au point On va utiliser dans cette
Algorithmique et Programmation, IMA
Algorithmique et Programmation, IMA Cours 2 : C Premier Niveau / Algorithmique Université Lille 1 - Polytech Lille Notations, identificateurs Variables et Types de base Expressions Constantes Instructions
DU BINAIRE AU MICROPROCESSEUR - D ANGELIS CIRCUITS CONFIGURABLES NOTION DE PROGRAMMATION
145 NOTION DE PROGRAMMATION 1/ Complétons notre microprocesseur Nous avons, dans les leçons précédentes décrit un microprocesseur théorique, cependant il s inspire du 6800, premier microprocesseur conçu
Pourquoi l apprentissage?
Pourquoi l apprentissage? Les SE sont basés sur la possibilité d extraire la connaissance d un expert sous forme de règles. Dépend fortement de la capacité à extraire et formaliser ces connaissances. Apprentissage
Grammaires d unification
Cours sur le traitement automatique des langues (IV) Violaine Prince Université de Montpellier 2 LIRMM-CNRS Grammaires d unification Grammaire catégorielle Grammaire syntagmatique généralisée (GPSG) Les
Licence Bio Informatique Année 2004-2005. Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...
Université Paris 7 Programmation Objet Licence Bio Informatique Année 2004-2005 TD n 1 - Correction Premiers pas Exercice 1 Hello World parce qu il faut bien commencer par quelque chose... 1. Enregistrez
Classes et Objets en Ocaml.
Classes et Objets en Ocaml. Didier Rémy 2001-2002 http://cristal.inria.fr/ remy/mot/2/ http://www.enseignement.polytechnique.fr/profs/informatique/didier.remy/mot/2/ Cours Exercices Slide 1 1. Objets 2.
Préparation à l examen EFA en Macro
Préparation à l examen EFA en Macro Exercice sur les macros en Word / Excel Les questions suivantes doivent constituer un bref rafraîchissement et vous aider à situer le niveau de vos connaissances : Question
Rappels d architecture
Assembleur Rappels d architecture Un ordinateur se compose principalement d un processeur, de mémoire. On y attache ensuite des périphériques, mais ils sont optionnels. données : disque dur, etc entrée
Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski [email protected]
Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski [email protected] Mars 2002 Pour Irène et Marie Legal Notice Copyright c 2002 Patrick Cégielski Université
MIS 102 Initiation à l Informatique
MIS 102 Initiation à l Informatique Responsables et cours : Cyril Gavoille Catherine Pannier Matthias Robine Marc Zeitoun Planning : 6 séances de cours 5 séances de TD (2h40) 4 séances de TP (2h40) + environ
ALGORITHMIQUE ET PROGRAMMATION En C
Objectifs ALGORITHMIQUE ET PROGRAMMATION Une façon de raisonner Automatiser la résolution de problèmes Maîtriser les concepts de l algorithmique Pas faire des spécialistes d un langage Pierre TELLIER 2
La mémoire. Un ordinateur. L'octet. Le bit
Introduction à l informatique et à la programmation Un ordinateur Un ordinateur est une machine à calculer composée de : un processeur (ou unité centrale) qui effectue les calculs une mémoire qui conserve
Algorithmique et programmation : les bases (VBA) Corrigé
PAD INPT ALGORITHMIQUE ET PROGRAMMATION 1 Cours VBA, Semaine 1 mai juin 2006 Corrigé Résumé Ce document décrit l écriture dans le langage VBA des éléments vus en algorithmique. Table des matières 1 Pourquoi
Chapitre VI- La validation de la composition.
Chapitre VI- La validation de la composition. Objectifs du chapitre : Expliquer les conséquences de l utilisation de règles de typage souples dans SEP. Présenter le mécanisme de validation des connexions
PHP 5.4 Développez un site web dynamique et interactif
Editions ENI PHP 5.4 Développez un site web dynamique et interactif Collection Ressources Informatiques Table des matières Table des matières 1 Chapitre 1 Introduction 1. Objectif de l'ouvrage.............................................
