La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

1 Les opérations d'un algorithmes sont habituellement exécutées une à la suite de l'autre, en séquence ordre est important. (parallélisme) On ne peut pas.

Présentations similaires


Présentation au sujet: "1 Les opérations d'un algorithmes sont habituellement exécutées une à la suite de l'autre, en séquence ordre est important. (parallélisme) On ne peut pas."— Transcription de la présentation:

1 1 Les opérations d'un algorithmes sont habituellement exécutées une à la suite de l'autre, en séquence ordre est important. (parallélisme) On ne peut pas arbitrairement changer cette séquence. –Affectation –Sélection –Répétition Primitives fondamentales d'algorithmique

2 2 facultatif Branchement conditionnel if (condition) { instructions } else { instructions } if (condition) instruction else instruction test_faux test test_vrai test_2 test_2_vrai test_3_faux test_1 test_1_vrai

3 3 Tous les autres cas Ne pas oublier Type int Branchement multiple switch (variable_énumérable) { case valeur_1 : instructions ; break; case valeur_2 : instructions ; break; default : instructions ; } Pourquoi une nouvelle sélection ?

4 4 Boucles indicées Contrôlée par un indice nombre ditérations connu à lavance (déterministe). for ( initialisation ; condition_de_boucle ; évolution ) { instructions; } Éxécuté 1 fois Éxécuté à chaque fois Continue tant que condition = vrai for (init;test;incr) { corps_boucle; } corps_boucle incr test init

5 5 Boucles conditionnels Contrôlée par une condition nombre ditérations inconnu par avance (indéterministe). while ( condition ) { instructions; } Continue tant que condition = vrai do { instructions; } while ( condition ) (On peut ne pas rentrer) (On rentre au moins une fois) corps_boucle test while (test) { corps_boucle; }

6 6 Méthodologie de résolution d'un problème 1- Définir le problème (QUOI ?) Lire lénoncé du problème, être certain de bien le comprendre, ressortir les informations pertinentes : données ? résultats ? relations entre données ? Création du cahier des charges qui définie ces notions en détails. 2- Analyser le problème (COMMENT ?) Réfléchir à la résolution du problème en ignorant lexistence du PC - Expliciter les donnéeset les résultats Définir précisément leur Nature : Simple, Structure, Domaine de validité - Expliciter les relations données/résultats exploiter lensemble de vos connaissances et solution existantes. encore difficile ? Décomposer le problème!! Analyse descendante!!

7 7 3- Résoudre le problème Algorithme = méthode de résolution. Pour décrire l'algorithme, il faut un langage algorithmique. Le langage algorithmique peut avoir plusieurs formes mais à quelques contraintes : Langage limité et précis. Écrire formellement lalgorithme en utilisant un pseudo langage ou un organigramme Vérifier votre solution sur un exemple (preuve formelle de lalgorithme) 4- Implémentation Transformer l'algorithme en programme Le programme sera compilé puis exécuté. 5- Validation des résultats Tester le programme sur différents jeux de tests le jeux de tests doit être « suffisant » ne pas oublier les cas particuliers, …

8 8 Savoir être : –efficace : quelle méthode me permettra dobtenir le plus vite, le plus clairement, le plus simplement possible les résultats attendus. –paresseux : que puis-je réutiliser? –prévoyant : sassurer que le programme sera facilement réutilisable et extensible

9 9 Exemple dun problème: Tri dun ensemble déléments –Entrée: Suite de n éléments a 1,…a n –Sortie: La suite ordonnée Instances du problème: –Suite de nombres: 475, 787, 34, 245, 56, 350 Méthodes danalyse Instance du problème

10 10 Objectifs: Méthode pour écrire un algorithme de qualité. Principe: Abstraire: Repousser le plus loin possible lécriture de lalgorithme. Décomposer: Décomposer la résolution en une suite de sous-problèmes que lon considère comme résolus. Combiner: Résoudre le pb par combinaison des abstractions des sous-pbs. Pb: Afficher les nbres parfaits compris entre 1 et un nbre saisi par lutilisateur Énoncé: Afficher les nombres parfaits (nombre égaux à la somme de leurs diviseurs) compris entre 1 et un nombre n (naturel 1) saisi par lutilisateur. afficherNbsParfaits entier saisirBorneMax entier booléen estParfait entier sommeDesDiviseurs entiers booléen estUnDiviseur Analyse descendante

11 11 La méthode danalyse « diviser pour régner » : –on conçoit un ensemble de procédures pour résoudre le problème –programmation dirigée par les traitements : on décide dabord de la manière dont on va manipuler les données puis on conçoit les structures de données pour faciliter cette manipulation. –une procédure est un regroupement dinstructions dans un bloc que l'on pourra appeler par son nom La méthode danalyse « diviser pour régner » : –Ces procédures reçoivent éventuellement des variables en paramètres et effectuent des traitements sur ces variables données en paramètres ou sur des variables déclarées à lintérieur de la procédure. –Une variable est un morceau de mémoire auquel on donne un nom et dans lequel on stocke des valeurs. Diviser pour régner

12 12 Décomposer une tâche complexe en tâches élémentaires. Penser en termes détapes. Vérifier la succession des opérations. Assurer la rigueur décriture. Apport de la démarche algorithmique

13 13 Il est parfois difficile de définir un objet: plus simple de le définir en fonction de lui-même. Récursion en programmation: quand une méthode sappelle elle-même. Toute méthode récursive peut-être convertie en méthode non-récursive. Méthodes récursives plus coûteuses en espace mémoire, et parfois aussi en temps. Récursivité La récursivité est un mécanisme de calcul puissant!! Résoudre un problème de taille n peut se ramener à la résolution dun (plusieurs) sous problèmes de taille plus réduite...

14 14 Exemple (suite) Daprès la définition précédente : «a» est une chaîne : un caractère a suivi dune chaîne vide «ab» est une chaîne : un caractère a suivi de la chaîne « b » La récursivité est un mécanisme puissant de définition dobjets!

15 15 Procédure récursive Procédure qui sinvoque elle-même Exemple: n! = n(n-1)(n-2)…2.1 Si n0 0! = 1 n! = n(n-1)! pour n1 5! = 5.4!4! = 4.3!3! = 3.2!2! = 2.1!1! = 1.0! = 1 = 2 = 6 = 24 = 120 Toute procédure récursive doit avoir une condition darrêt: cas de base qui permet de ne plus invoquer la procédure. Ici, la condition darrêt est n=0

16 16 Trace pour n =3: factoriel(3) Retourne: 3.factoriel(2) factoriel(2) Retourne: 2.factoriel(1) factoriel(1) Retourne: 1.factoriel(0) factoriel(0) Retourne: 1 1.1=1 2.1=2 3.2=6 Entrée: Entier n0 Sortie: n! Procédure factoriel (n) Si n = 0 alors Retourne (1) Retourne (n.factoriel(n-1)) Fin factoriel

17 17 Procédure itérative pour le calcul de n! Entrée: Entier n0 Sortie: n! Procédure factoriel-iteratif (n) res = 1; courant = n; Tant que courant>0 Faire res := res * courant; courant := courant-1; Fin Tant que Retourne (res) Fin factoriel-iteratif Trace pour n =3 : res=1courant=3 res=3courant=2 res=6courant=1 res=6courant=0

18 18 Nombres de Fibonacci Exemple: Un robot peu avancer par des pas de 1 ou 2 mètres. Calculer le nombre de façons différentes de parcourir une distance de n mètres DistanceSuite de pasNb de possibilités ,1 ou 22 31, 1, 1 ou 1, 2 ou 2, 13 41,1,1,1 ou 1,1,2 ou 1,2,1 ou 2,1,1 ou 2,2 5

19 19 Pas(n): Nombre de possibilités pour parcourir n mètres. Pas(1) = 1, Pas(2) = 2; Pour n>2: –Si premier pas = 1 mètres, il reste n-1 mètres -> Pas(n-1) –Si premier pas = 2 mètres, il reste n-2 mètres -> Pas(n-2) Donc, Pas(n) = Pas(n-1)+Pas(n-2) Entrée: n Sortie: Pas(n) Procédure Pas (n) Si n=1 ou n=2 alors Retourne (n) Retourne (Pas(n-1)+Pas(n-2)) Fin Pas Séquence de Fibonacci: f 1 = 1 f 2 = 2 f n = f n-1 + f n-2 pour n>2

20 20 Récursivité Vs Itération procédure Itération( ) Tantque (condition) faire fin tantque procédure Itération( ) Si (condition) alors Itération() fin si fonction S(n) : entier S :=0 Tant que (n>0) faire S:=S+n n:=n-1 fin tant que retourner S fonction S(n) : entier Si (n=0) alors S:= 0 sinon S:= S(n-1)+n fin siItérationRécursivité

21 21 Diviser pour résoudre Principe général : -Diviser le problème de taille n en sous-problèmes plus petits de manière que la solution de chaque sous-problème facilite la construction du problème entier.(Analyse descendante) -Division progressive jusqu' à l'obtention d'un sous-problème de taille 1. Schéma général : DPR(x) : Si x est suffisamment petit ou simple alors Retourner A(x) Sinon Décomposer x en sous exemplaires x1,x2...xk Pour i=1, k : yi := DPR(xi) Finpour Retourner les yi pour obtenir une solution à x Retourner y Fsi

22 22 Applications : Tri par fusion d'une liste L de n éléments avec n = 2k. Une technique "diviser pour résoudre" peut être la suivante: Pour trier une liste de n éléments, il faut trier deux listes de n/2 éléments chacune puis de faire l'interclassement entre ces deux listes. De la même façon, pour trier une liste de n/2 éléments il faut trier deux listes de n/4 éléments chacune puis de faire leur interclassement. Et ainsi de suite jusqu'à l'obtention de listes d'un seul élément.

23 23 Les Tours de Hanoi ABC Peut-on bouger les disques de A vers C en utilisant B. Contrainte : un disque ne peut jamais être déposé sur un disque plus petit Y a-t-il une solution ?

24 24 ABC ABC ABC

25 25 Supposons quon ait n disques au départ Les disques sont numérotés de 1 à n, par ordre croissant de diamètre. Algorithme : –Bouger les n-1 plus petits disques de A à B en utilisant C –Bouger le disque n de A à C –Bouger les n-1 plus petits disques de B à C en utilisant A Complexité : 2^n-1 mouvements !!!

26 26 Quelques citations : –« Pour comprendre un programme d un seul tenant, un être humain met normalement un temps qui augmente exponentiellement avec la taille du programme » Djikstra –«Pour maîtriser la complexité du problème à résoudre, diviser chacune des difficultés que jexaminerais en autant de parcelles quil pourrait et qu il serait requis pour mieux le résoudre » Descartes stratégie "diviser pour régner » Décomposition modulaire permet dalléger le programme, de faciliter sa Maintenance, de le Structurer, daméliorer sa Lisibilité, Extensibilité et Réutilisation.

27 27 Les fonctions sont au plus bas niveau de la décomposition dun problème. Une fonction devrait avoir un seul but ou tâche à exécuter. Les fonctions sont représentées dans un graphe de structure qui est une hiérarchie (fonctionnelle). Une fonction est une abstraction parce quelle peut cacher les détails dune tâche et elle réduit linterface à des paramètres et une valeur de retour. Les fonctions et procédures Les procédures et les fonctions sont à la base de la programmation structurés

28 28 Avantages : Les fonctions nous permettent de factoriser nos problèmes en parties gérables et compréhensibles. Facilitent la distribution du travail. Permettent la réutilisation du code – bibliothèques et fonctions définies par les programmeurs de systèmes. Permettent de protéger les données de chaque fonction (visibilité). Vision très « top-down » de la programmation, tendance cartésienne analytique Attention : Danger du « Code spaghetti »

29 29 Une fonction est déclarée avec un prototype qui consiste en un entête de fonction. La définition du code de la fonction cest son implémentation Type_retour NomFonction (liste formelle de paramètres); { \*définitions locales + traitement *\ } \\ nom de la fonction entête corp s Variable = NomFonction(Var1,Var2); appe l Déclaration et définition dune fonction Principe de la « boîte noire » Une procédure peut être assimilé à une « boîte noire », cest à dire un module dont on peut ne connaître que les interactions possibles avec le monde extérieur : Procédure /fonction N entréesN sorties

30 30 En C nous pouvons décomposer une grosse fonction monolithique (main) en de plus petites fonctions cohésives. NB: Pour pouvoir faire un programme exécutable il faut toujours une fonction « main », cest le point dentrée dans le programme : le microprocesseur sait quil va commencer à exécuter les instructions à partir de cet endroit Ces fonctions peuvent être misent à lintérieur dun seul fichier: une unité de compilation Déclarer par des prototypes de fonctions. Une fonction peut avoir le type void Une fonction void ne peut pas faire partie dune expression, elle peut seulement être un énoncé.

31 31 C nous fournit deux types de fichiers pour que nous puissions définir nos modules –Le fichier.h – ou entête de module : Contient la déclaration des fonctions et les attributs que nous voulons que les autre modules voient. Aussi connue comme interface du module –Le fichier.c – ou corps du module : Contient la définition des fonctions qui sont déclarées dans lentête du module et autres fonctions internes ou de soutient. Connue comme implémentation du module Le module C

32 32 Modules = fonctions (déclaration / implémentation) Communication entre modules = appels de fonctions Flexibilité et réutilisation par des pointeurs de fonctions Comprendre le programme comprendre ce que fait chaque fonction. Pour les gros programmes, il ne suffit pas seulement de décomposer un programme en fonctions. Tout comme un édifice, un programme logiciel doit avoir une structure bien dessinée; une architecture Larchitecture dun gros programme doit être exprimée en unités de compilation séparées En C, ces unités de compilation sont des modules (ex. les bibliothèques de modules tel que stdio, conio, …)

33 33 Le concept de masquage dinformation est clef pour les concepts de décomposition et dabstraction. On cache linformation qui peut changer et on expose une interface stable qui ne changera pas. Linformation est obtenue ou changée SEULEMENT en utilisant linterface. Masquage dinformation Il y a 2 façons principales pour échanger de linformation entre les fonctions : –Variables partagées (variables globales). –Passage de paramètres, la déclaration explicite dinformation nécessaire pour quune fonction réalise sa tâche. Type et paramètres de fonction

34 34 Utilisation d une procédure et passage de paramètres Passage par valeur Passage par adresse (par référence) Variables locales et passage de paramètres

35 35 –Inconvénients d'une utilisation systématique de variables globales manque de lisibilité risque d'effets de bord si la procédure modifie les variables globales –Avantages d'une utilisation de variables locales meilleure structuration. diminution des erreurs de programmation. les variables locales servent de variables intermédiaires (tampon) et sont "oubliées" (effacées de la mémoire) à la sortie de la procédure. Une procédure doit effectuer la tâche qui lui a été confiée, en ne modifiant que l'état de ses variables locales.

36 36 Structures de données Problème : Comment Organiser au mieux linformation dans un Programme ? Choisir la façon de représenter les données qui rendent le programme le plus efficace possible en temps, en espace etc. Listes linéaires chaînées : –ensemble de nœuds alloués dynamiquement chaînés entre eux. –un nœud est une entité de stockage. –plus adapté aux instances de taille variable Arbres : – structure de données hiérarchisée. Graphe : – structure plus complexe représentant des relations entre éléments. Hachage : transformer une donnée (par une fonction) en une adresse où sera logée la donnée. (Gestion des collisions)

37 37 Lorsquon utilise une structure de données, limportant est de connaître les opérations que lon peut effectuer sur les données. Un type abstrait de données (TAD, ou ADT en anglais): Description dune structure de données qui fait abstraction des détails de limplémentation. Modèle ou type de données abstrait : Écrire des algorithmes indépendamment de la représentation mémoire. Donc définition d'une machine abstraite pour chaque structure de données (Modèle ) avec un ensemble d'opérations Exemple: –Créer une liste vide –Ajouter un élément (début, fin, milieu) –Retirer un élément (début, fin, milieu) –Détruire une liste –Trier les éléments dune liste Abstraction

38 38 Les tableaux Ensemble dobjets de même type à accès direct Taille du tableau fixe, nest pas modifiable, accessible par la valeur Accès aux éléments par tableau[i] Non vérification des bornes si débordement Indices débutant à 0 (en algorithmique 1) Création dun tableau en 1 étape (2 dans dautres langages: déclaration et instanciation) Stockage compact Taille fixe, en général Réajustement de taille coûteux en temps Insertion délément onéreuse en temps Indices Tableau de 10 éléments tableau 0246

39 39 Copie dun tableau = copie des éléments un à un (la destination doit être créée) T T T2 Situation possible en java mais pas en C (T est une constante, utilisation de pointeur) Copie de tableaux de nombres ou partage

40 40 Structures de données en RAM Intérêts des pointeurs éé Gestion de lespace mémoire en cours dexécution éè Modifications de variables passées en paramètres de fonction éèé Représentation de tableaux : accès direct et indexé en C++ dautres utilisations Allocation mémoire : statique : espace alloué avant l'exécution du programme. dynamique : espace alloué pendant l'exécution. mixte : mélange des deux.

41 41 int* a = NULL; // Initialisation dun pointeur à NULL a int* a=(int*)malloc(3*sizeof(int)); // Allocation et assignement a *a free(a); // Désallocation dynamique a *a

42 42 Tête Noeud Liste chaînée : Structures p_first p_last nb_elements Node_t p_datap_next List_tData_t typedef struct LIST { NODE* p_first_node_ ; NODE* p_last_node_ ; int nb_items_ ; } LIST ; typedef struct NODE { struct NODE* next_ ; void* p_item_ ; } NODE ;

43 43 Tête Noeud BOOLEAN check_item( LIST* list, DATA* data ) { BOOLEAN found = LIST_Owns_Item( list, data ); if( found ) { printf( Item %d, %c in List, data->index_, data->value_ ); } return found; } List_t* list_create( void ); int list_insert_item( List_t* list, Data_t* item );

44 44 Choix d'une représentation mémoire et la traduction des opérations du modèle dans cette représentation. Toujours tester la validité dun pointeur avant de lutiliser. Sassurer de ne jamais perdre ladresse dune zone allouée dynamiquement. Dans un programme, toute allocation par malloc ou calloc doit être suivie dune désallocation par free. Liste chaînée : Implantation

45 45 Pile, ou Tas (Stack) : structure LIFO void push(Data_t*)Data_t* pop(void) Liste chaînée : Pile et File File, ou queue : structure FIFO void push(Data_t*) Data_t* pop(void)

46 46 TreeNode_t p_datap_next Data_t p_first_childp_parent Arbres: Structure de données

47 47 Programmer, cest plus que simplement écrire du code. Comment les langages de programmation diffèrent-ils des langages naturels? Quest-ce quun bon programmeur? Un programmeur devrait-il connaître plus dun langages de programmation? Pourquoi étudier les langages de programmation? Langage de programmation

48 48 Dispositifs physiques OS Compilateurs Editeurs Applications Interpréteurs Langage machine Structure dun système informatique

49 49 Langages de bas niveau (langage machine, assembleur). Langages de haut niveau (les langages les plus utilisés : C, C++, …). Langages de très haut niveau (Prolog, langages spécialises, SQL, …). Au delà des langages de programmation : Environnements de programmation et outils de développement logiciel (J2EE,.NET) Niveau de complexité et dabstraction

50 FORTRAN (John Backus)FORTRANJohn Backus 1959 LISP (McCarthy)LISPMcCarthy 1960 COBOL (Grace Hopper)COBOLGrace Hopper 1960 BASIC (Kemeny, Kurtz)BASICKemenyKurtz 1971 Pascal (Niklaus Wirth, Kathleen Jensen)PascalNiklaus WirthKathleen Jensen 1972 C (Brian W. Kernighan, Dennis Ritchie)CBrian W. KernighanDennis Ritchie 1975 Prolog (Colmerauer et. al.)PrologColmerauer 1980 AdaAda 1983 Objective C (ObjC) (Brad Cox)Objective CBrad Cox 1983 C++ (Bjarne Stroustrup)C++Bjarne Stroustrup 1987 Perl (Larry Wall)PerlLarry Wall 1988 Tcl (John Ousterhout)TclJohn Ousterhout 1991 Python (Guido van Rossum)PythonGuido van Rossum 1995 DelphiDelphi 1995 Java (Sun Microsystems)JavaSun Microsystems 1997 PHP (Rasmus Lerdorf), JavaScriptPHPRasmus LerdorfJavaScript 2001 C# (Microsoft dans le cadre de.NET)C#Microsoft.NET 2002 Visual Basic.NETVisual Basic.NET 2003 Delphi.NETDelphi.NET Historique des Langages de programmation

51 51 Différent langages permettent de résoudre différent problèmes de façon différentes. Une opération peut être exprimée dans différent langages, puis exécuté sur la même machine. Langages à usage général : la plupart des langages que vous connaissez. Langages impératifs : permettent au programmeur dattribuer des valeurs a des espaces mémoire, afin de décrire explicitement comment résoudre le problème. (Java, C++, Pascal) Langages déclaratifs : permettent au programmeur de déclarer diverse entités et relations. Le programme pourra ensuite utiliser ces declarations pour résoudre le problème. (Prolog, Lisp) Langages spécialises : ex: matlab (mathématiques), Cobol (Gestion), SQL (langage assertionnel pour BD), Perl (langage script). Les différent types de langages

52 52 Programmation procédurale: Le programme est divisé en blocs pouvant contenir des variables locales, ainsi que dautres blocs. (C, Fortran, Pascal) Programmation orientée-objet: Des objets se rapportant au problème sont définis, avec leurs attributs et leur façon de réagir à différent événements. Le problème est résolu grâce a linteraction entre ces objets. (Java, C++,…) Programmation fonctionnelle: Un programme consiste en la déclaration de fonctions. Un appel a une fonction est fait et retournera un élément qui dépendra de la valeur de ses paramètres qui peuvent, eux même, être des appels a des fonctions.(Lisp) Programmation logique: Un programme consiste en la déclaration dune série d axiomes et de règles de déduction, et la présentation dun théorème à prouver. Le programme répond si le théorème peut être prouvé ou non à partir des déclarations. (Prolog) Langages Impératifs Langages Déclaratifs

53 53 Abstraction : abstraction procédurale et labstraction des données permettent la généralité des programmes. Absence dambiguïtés. Simplicité : C et Pascal sont simple, C++ et Java? Modularité : présence doutils de modularisation et la capacité dêtre incorporé dans un environnement de programmation intégré. Fiabilité : Vérification des types, traitement des exceptions et erreurs, labsence dambiguïtés (et en générale la lisibilité et laptitude à lécriture). Coût associées à lutilisation du langage : –Temps nécessaire au développement (facilité de programmation, disponibilité de code, de librairies et de documentation). –Facilité dimplémentation. –Portabilité et standardisation. Critères dun langage de programmation

54 54 Implémentation de langage de programmation Processeur de langage : Dispositif (logiciel ou matériel (hardware)) capable dexécuter des instructions du langage. La traduction est le processus qui transforme un programme dun langage à un autre, tout en préservant son sens et sa fonctionnalité. Le langage cible peut être directement exécutable sur lordinateur, ou (plus souvent) devra à nouveau être traduit en un langage de niveau inférieur. Machine virtuelle : cest une réalisation logicielle (simulation) dun processeur de langage. Il est difficile de programmer directement pour le hardwarele hardware est donc généralement « enveloppé » de plusieurs couches logicielles. Une couche peut être partagé par plusieurs processeurs de langage, chacun ayant sa propre machine virtuelle au dessus de cette couche.

55 55 Compilation : Un compilateur a pour rôle de transformer tout programme écrit dans un langage source en un programme réellement exécuté par la machine. Le code résultant sera exécuté plus tard. Interprétation : Divise le programme en petit fragments (représentant des éléments de syntaxe). Une boucle traduit et exécute immédiatement les fragments. On désigne un processeur de langage comme interpréteur sil ressemble plus à un interpréteur, et comme compilateur, sil ressemble plus à un compilateur. Limplémentation des langages de programmation utilise souvent un mélange des deux (ex. Java est compilé en « bytecode », puis celui-ci est interprété). Modèles dimplémentation

56 56 Les compilateurs Phases dun compilateur : La compilation d'un programme passe par plusieurs phases : –Analyse lexicale –Analyse syntaxique –Analyse sémantique –Interprétation ou génération de code –Lorsqu'on passe par la phase de génération de code on parle de compilateur. –Lorsqu'on passe par la phase d'interprétation on parle d'interpréteur.

57 57 Analyse lexicale : Analyse microscopique des éléments formant un programme. Ces éléments, appelés unité lexicales, sont les mots réservés du langage, les identificateurs utilisateurs, les caractères spéciaux, les constantes, etc. Un analyseur lexical élimine tout ce qui n'est pas utile pour la phase suivante qui est l'analyse syntaxique. Il ignore ainsi les commentaires et les blancs. Analyse syntaxique : Analyse macroscopique. Derrière tout langage de programmation il y a une grammaire formée de l'ensemble des règles utilisées pour lécriture des programmes.

58 58 Analyse sémantique : Donne un sens aux différentes instructions du programme. Facilite létape de génération de code ou d'interprétation. Forme interne = Découpage du programme en un ensemble d'opérations élémentaires directement interprétées dans un autre langage de programmation ou traduites en code objet. Génération de code : Consiste à associer à chaque élément de la forme interne léquivalent en code objet. Interprétation : Consiste à associer à chaque élément de la forme interne léquivalent dans le langage d'interprétation.

59 59 Données de sortie Données dentré Programme résultant Programme abstrait (optimisé) Arbre syntaxique Table de symboles Programme source Optimisation du code Analyse sémantique Chargeur/Éditeur de liens (Loader/Linker) Génération du code Ordinateur Analyse lexicale (scaning) Analyse syntaxique (parsing) Compilateur Séquence dunités lexicales Programme abstrait (code intermédiaire) Code exécutable (object code) Compilation et exécution

60 60 Compilation Fichier de code Fichier d'entête Code objet Edition de liens Autres code objet Librairies Programme exécutable Etapes d'exécution dun langage compilé : cas C

61 61 Compilateur: traduire le programme entier une fois pour toutes –+ plus rapide à lexécution –+ sécurité du code source –- il faut recompiler à chaque modification Interpréteur: traduire au fur et à mesure les instructions du programme à chaque exécution –+ exécution instantanée appréciable pour les débutants –- exécution lente par rapport à la compilation exemple.cCompilateur fichier source exemple fichier exécutable exécution exemple.bas fichier source Interprétation+exécution Compilateur/interpréteur


Télécharger ppt "1 Les opérations d'un algorithmes sont habituellement exécutées une à la suite de l'autre, en séquence ordre est important. (parallélisme) On ne peut pas."

Présentations similaires


Annonces Google