0% ont trouvé ce document utile (0 vote)
51 vues30 pages

Programme

Transféré par

Akram Maoujoud
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
51 vues30 pages

Programme

Transféré par

Akram Maoujoud
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

STIC A – SYSTÈMES INFORMATIQUE

LANGAGES INFORMATIQUES

[Link]@[Link]
LANGAGES INFORMATIQUES

§ Au début, la programmation consistait à établir des listes


d'instructions machine à 101001100110

§ Nécessité d'écrire des programmes sous une forme plus naturelle,


dans laquelle les éléments (fonctions, instructions, déclarations,
expressions, etc.) sont combinés selon des règles précises

§ À la fin des années 50 sont apparus les premiers langages de


programmation
– Comment définir formellement un tel langage ?
– Quel niveau d’expressivité et d’abstraction ?
– Comment traduire un algorithme exprimé dans ce langage vers un
code exécutable?

STIC A - Systèmes Informatiques 2 Département Informatique, École Navale


DÉFINITION D’UN LANGAGE INFORMATIQUE

• Alphabet et mots
– Un alphabet A = {a, b, c...} est un ensemble fini et non vide
– Les éléments de A sont appelés lettres, caractères ou symboles
– Un mot sur un alphabet A est une suite finie, éventuellement vide, de
symboles de A.
– Le mot vide est noté ε
– An désigne l'ensemble des mots de longueur n ϵ N
– A* = A0 u A1 u A2 … désigne l’ensemble de tous les mots

• Langage formel
– Un langage formel L sur un alphabet A est une partie de A

Le langage des mots de deux lettres au plus sur A = {a, b, c}


est

L = {ε, a, b, c, aa, bb, cc, ab, ba, bc, cb, ac, ca}

STIC A - Systèmes Informatiques 3 Département Informatique, École Navale


LANGAGE ENGENDRÉ PAR UNE GRAMMAIRE

• Une grammaire est un quadruplet G = (N; T; P; S)


– N est l'ensemble des symboles non terminaux
– T est l'ensemble des symboles terminaux : caractères de l'alphabet
– P est un ensemble de règles de production de la forme α → β , avec
α ϵ (N ∪ T)+; β ϵ (N ∪ T)*
– S = symbole de départ appelé l'axiome

• Pour une grammaire G, on note L(G) le langage engendré par G

• L(G) est l'ensemble des mots que l'on peut définir a partir de
l'axiome de G en appliquant un nombre fini de fois des règles de G

STIC A - Systèmes Informatiques 4 Département Informatique, École Navale


GRAMMAIRE EN FORME BACKUS-NAUR (BNF)

• Moyen simple et élégant de décrire toutes les phrases permises


d'un langage (de programmation)

Exemple (en langage naturel) :


<phrase > : := <sujet ><verbe ><objet >
<sujet > : := <déterminant ><nom >
<objet > : := <déterminant ><nom > | représente une alternative
< > entoure les objets du langage
<verbe > : := mangent | voient
<déterminant > : := les | des
<nom > : := chats | lions | souris| jambons

Exemple de phrase permise : les jambons mangent des lions

STIC A - Systèmes Informatiques 5 Département Informatique, École Navale


GRAMMAIRE EN FORME BACKUS-NAUR (BNF)

<phrase > : := <sujet > <verbe ><objet >


⇒ <déterminant ><nom><verbe><objet>
phrase
⇒ les <nom><verbe><objet>
⇒ ...

sujet verbe objet

déterminant nom déterminant nom

les jambons mangent des lions

Cet arbre syntaxique constitue une preuve que la


phrase appartient bien au langage

STIC A - Systèmes Informatiques 6 Département Informatique, École Navale


LES NIVEAUX DE LANGAGE DE PROGRAMMATION

• Chaque processeur possède son propre jeu d’instructions machine


et son langage associé (chaîne binaire). Seules ces instructions
sont exécutables par le processeur

• Le langage d’assemblage est l’équivalent du langage machine.


Chaque champ binaire de l’instruction machine est remplacé par
un mnémonique alphanumérique

• Le langage de haut niveau est indépendant de la machine


physique. Pour pouvoir être exécuté, un programme en langage
de haut niveau doit être traduit vers son équivalent machine :
c’est le rôle du compilateur

000001010000 0001 00000000000000000000

ADDIm R1 0

STIC A - Systèmes Informatiques 7 Département Informatique, École Navale


LES PARADIGMES DE PROGRAMMATION

• Il existe de nombreux paradigmes de programmation : impérative,


fonctionnelle, événementielle, logique, objet, composant,
procédurale, par contraintes, concurrente…

• La relation entre les paradigmes de programmation et les


langages de programmation peut être complexe
– Un langage de programmation peut supporter des paradigmes
multiples
– Par exemple, C++ mélange des éléments de programmation
procédurale, de programmation orientée objet et de programmation
générique

• Parmi les modèles majoritaires : 3 grandes époques


– Spaghetti
– Structuré/procédural
– Object

STIC A - Systèmes Informatiques 8 Département Informatique, École Navale


LE MODÈLE DE PROGRAMMATION SPAGHETTI

• La programmation spaghetti est un style d'écriture de code qui


favorise l'apparition du syndrome du plat de spaghettis :
– un code très linéaire, peu clair et qui fait un usage excessif de sauts
inconditionnels
– Logique de saut « goto »

• Caractéristique des langages tels que Assembleur, Fortran I, Basic

• Absence d'entités autonomes et modifiables indépendamment du


reste du programme (monolithe)
10 i = 0
20 i = i + 1
• Code et données étroitement imbriqués 30 IF i <> 11 THEN GOTO 80
40 IF i = 11 THEN GOTO 60
50 GOTO 20
60 PRINT "Programme terminé."
70 END
80 PRINT i & " au carré = " & i * i
90 GOTO 20

STIC A - Systèmes Informatiques 9 Département Informatique, École Navale


LE MODÈLE DE PROGRAMMATION STRUCTURÉ

• La programmation structurée décrit les opérations en un ensemble


de séquences d'instructions (typique du modèle procédural)

• Caractéristique des langages tels que Pascal, C, Algol, Perl, Python

• Vers plus de modularité :


– Expression séparée des données et des traitements
– Données typées et possibilité de création de types complexes
– Structures de contrôle remplaçant les sauts
– Notion de sous-programmes et compilation séparée (entités
autonomes)

• Le modèle est très largement répandu dans la mesure où la quasi-


totalité des processeurs qui équipent les ordinateurs fonctionnent
eux-mêmes selon ce modèle

STIC A - Systèmes Informatiques 10 Département Informatique, École Navale


LE MODÈLE DE PROGRAMMATION OBJET

• La programmation par objets repose sur la définition et


l'interaction d’éléments logiciels appelés objets
– Un objet représente un concept, une idée ou toute entité du monde
physique (objets « chronomètre », « voiture »)
– Il possède une structure interne et un comportement, et il sait
interagir avec ses pairs

• Caractéristique des langages tels que Simula, SmallTalk, Eiffel, C+


+, Pascal objet, Java, C#

• Approche qui regroupe les données et les traitements dans une


même entité appelée objet : les objets réels ne sont ni des
traitements purs, ni des données pures mais une combinaison des
deux

STIC A - Systèmes Informatiques 11 Département Informatique, École Navale


STIC A – SYSTÈMES INFORMATIQUE

DE L’ÉCRITURE DU PROGRAMME À L’EXÉCUTION DES INSTRUCTIONS


COMMENT PERCEVOIR LA MACHINE

• De règle générale, une machine informatique définit un langage et


réciproquement un langage définit une machine informatique

• Les ordinateurs peuvent être vus comme un ensemble de N


couches superposées correspondant à N machines (virtuelles)
– L’ordinateur est alors défini comme une « collection structurée
d ’abstractions »
– Une des couches est traitée par des circuits électroniques (la machine
réelle)

• Dans ce modèle, chaque niveau d ’abstraction repose sur le


niveau précédent
– Chaque niveau est défini par un nouveau jeu d ’instructions plus
pratique à utiliser, par l’humain, que le langage du niveau précédent
– Ces nouvelles instructions forment un nouveau langage Li, i ϵ {1..N}

STIC A - Systèmes Informatiques 13 Département Informatique, École Navale


UN EMPILEMENT DE MACHINE VIRTUELLES

• Deux techniques existent pour qu’un programme écrit en langage


évolué Ln d’une couche N devienne exécutable par une couche
inférieure N-i, i ϵ {1..n}
– La traduction ou la compilation
– L’interprétation

Définition pour chaque niveau un


« ordinateur hypothétique » que l’on
appelle une machine virtuelle

On peut écrire des programmes pour


les machines virtuelles comme si elles
existaient réellement

Pour que la traduction ou


l'interprétation reste assez simple il faut
que les langages Ln et Ln-1 ne soient
pas trop différents

STIC A - Systèmes Informatiques 14 Département Informatique, École Navale


LA TRADUCTION DE PROGRAMME

• Le programme écrit en langage évolué (couche N) est traduit dans


un autre langage généralement moins expressif (couche N ou
inférieure)

• Cette traduction appelée compilation est réalisée par un


compilateur

• Le résultat de la compilation est a son tour compilé, interprété ou


exécuté
Langage d’assemblage
Langage C
MOV R2, 5
function addition (long j) { MOV R1, adresse de J

long i=5; Compilation

J=J+i; ADD [R1], R2 LOAD R5, [R1]


} ADD R5, R2
STORE [R1], R5

Processeur CISC Processeur RISC

STIC A - Systèmes Informatiques 15 Département Informatique, École Navale


L’INTERPRÉTATION DE PROGRAMME

• Le programme écrit en langage évolué de la couche N n’est pas


traduit ou est traduit dans un langage intermédiaire

• Un interprète (ou interpréteur) est un programme exécutable


ayant pour tâche d'analyser, de traduire et d'exécuter (à la volée)
le programme source (ou intermédiaire)
Langage Bytecode
Langage Java public static void main
public class TestStack { 0: iconst_5
1: istore_1
static public void main (String argv[]) { 2: iconst_2
3: istore_2
int x=5; y=2; z=4; Compilation 4: iconst_4
5: istore_3
z = z+(x*x)+(y+y); 6: iload_3
[Link] ("Le résultat bidon est : "+z); 7: iload_1
} 8: iload_1
} 9: imul
10: iadd
Machine Virtuelle Java (JVM) …

Lire et analyser une instruction Bytecode 38: invokevirtual #9


Si l'instruction est syntaxiquement correcte, l'exécuter 41: return
Passer à l'instruction suivante }

STIC A - Systèmes Informatiques 16 Département Informatique, École Navale


LA COMPILATION VS. L’INTERPRÉTATION

Programme en langage
d ’assemblage du
processeur B
Programme en
Programme en langage langage évolué 1
d ’assemblage du
processeur A
Cross-compilateur Compilateur langage
processeur B vers évolué 1 pour
processeur A machine virtuelle C
Compilateur
Compilateur langage
assembleur pour
Couche évolué 1 pour
processeur A
logicielle processeur A Programme en
utilisateur langage pour la
Couche logicielle machine C
système Langage machine Machine
(1000110100101) virtuelle C

Processeur
A

Le cross-compilateur traduit le Un langage évolué est un langage A chaque instruction en langage


langage d’assemblage d’un puissant : une instruction en langage d’assemblage (langage symbolique le
processeur dans le langage évolué sera traduite par le compilateur à plus proche de la machine) correspond
machine d’un autre processeur l’aide de plusieurs instructions machine une instruction en langage machine

STIC A - Systèmes Informatiques 17 Département Informatique, École Navale


DU LANGAGE AUX TRANSISTORS EN 6 COUCHES

• Modèle en 6 couches constituant le fonctionnement de la plupart


des ordinateurs modernes

Couche des langages d’application


Niveau ❺
(fonctionnel, impératif, objet)

Traduction (compilateur)

Niveau ❹ Couche du langage d’assemblage


Traduction en code binaire (assembleur)

Niveau ❸ Couche du système d’exploitation

Interprétation partielle (système d’exploitation)

Niveau ❷ Couche du Processeur (architecture


numérique binaire) Interprétation (microprogramme)
ou exécution directe
Niveau ❶ Portes logiques et bascules

Transistors (architecture La couche du processeur


Niveau électronique) peut également contenir
plusieurs couches en interne

STIC A - Systèmes Informatiques 18 Département Informatique, École Navale


DU LANGAGE AUX TRANSISTORS EN 6 COUCHES

• La couche logique digitale (L0)


– Les objets manipulés sont des portes logiques (ET, OU)
– Combinaisons de portes (registres, circuits du CPU)
– Données manipulées : niveaux logiques 0, 1, tensions 0-5 V

• La couche micro-architecture (L1)


– Comporte des registres et une unité arithmétique et logique (ALU)
– Données manipulées : Signaux de contrôle provenant du
microprogramme (unité de contrôle)

• La couche ISA (Instruction Set Architecture) (L2)


– Forme la vue externe du processeur
– Données manipulées : Les instructions machines,
codes d’instructions en binaire

STIC A - Systèmes Informatiques 19 Département Informatique, École Navale


DU LANGAGE AUX TRANSISTORS EN 6 COUCHES

• La couche OS (L3)
– Données manipulées : Instructions interprétées par le OS
– Instructions interprétées directement par le microprogramme

• La couche langage d’assemblage (L4)


– Données manipulées : Forme symbolique d’un
des langages L2, L3
– Un assembleur traduit le langage assembleur (L4)
en codes d’instruction

• La couche langage de haut niveau (L5)


– Données manipulées : Instructions de haut niveau
– Langages C, C++, JAVA etc…
– Un compilateur traduit le langage de haut niveau en
langage L3 ou L4
– Interprétation dans certain cas (JAVA)

STIC A - Systèmes Informatiques 20 Département Informatique, École Navale


EXÉCUTION INTERNE AU PROCESSEUR (1/2)

• Problématique, on veut (typique des processeurs compatibles) :


– Pouvoir utiliser un langage machine sur différents processeurs de
manière transparente
– Que ces processeurs puissent être construit indépendamment par
différentes entreprises
– Que le langage machine utilisé permette d’utiliser toutes les
ressources d’un processeur

Langage machine commun 100101101….111001

Processeur, différent d’une A


S
B
machine à l’autre

Un processeur est compatible avec un autre si il reconnaît le même ensemble d’instructions

STIC A - Systèmes Informatiques 21 Département Informatique, École Navale


LES PROCESSEURS COMPATIBLES (2/2)

• La solution repose sur l’introduction d’une couche supplémentaire


– La solution a été proposée par IBM dans les années 60
– Les processeurs n’exécutent plus directement le langage machine, ils
le décodent avant de l’exécuter :
• On définit les instructions une fois pour toutes
• Chaque processeur se charge de traduire les instructions du langage
machine vers son microcode (interne et propriétaire)

Langage machine Le microcode est un programme


dont l'exécution au sein du
processeur définit le jeu
Décodage du langage machine d'instructions de celui-ci (le langage
machine)

Le langage machine (dites macro-


instructions) sont interprétées par le
microcode qui lui seul contrôle les
Microcode du processeur éléments internes au processeur

STIC A - Systèmes Informatiques 22 Département Informatique, École Navale


ARCHITECTURE & SYSTÈMES
INFORMATIQUES

LE PROCESSUS DE COMPILATION
LE PROCESSUS DE COMPILATION

• Un compilateur traduit un programme source écrit en langage de


haut niveau en un programme objet en langage de bas niveau
– Prend en entrée une donnée textuelle source (programme)
– La reconnaît (l’analyse) pour vérifier sa correction
– Emet éventuellement un message d'erreur
– Le traduit dans un langage cible

• Le travail du compilateur se divise en plusieurs phases :


– Analyse lexicale (recherche des mots-clés)
– Analyse syntaxique (vérification de la syntaxe)
– Analyse sémantique (vérification de la sémantique)
– Génération de code intermédiaire (.o)
– Optimisateur de code
programme programme
Compilateur
– Génération de code (.exe) source cible

messages d'erreur

STIC A - Systèmes Informatiques 24 Département Informatique, École Navale


ANALYSE LEXICALE

• L’analyse lexicale est le seul module au contact du code source

• L'analyseur lexical est un (gros) automate fini déterministe

• Son but est de reconnaître les unités lexicales ou lexèmes


– Les identificateurs et les mots clefs du langage
– L’affectation et les operateurs

• L'analyse lexicale produit des lexèmes à la volée en fonction de la


demande de l'analyseur syntaxique
identificateur

ab := y * x + 20

affectation operateur nombre

STIC A - Systèmes Informatiques 25 Département Informatique, École Navale


ANALYSE SYNTAXIQUE

• L’analyse syntaxique regroupe les unités lexicales en structures


grammaticales en suivant les règles figurant dans une grammaire
– Vérifier que le texte d'entrée est conforme a la grammaire
– Indiquer les erreurs de syntaxe
– Construire une représentation intermédiaire pour les autres modules
du compilateur (arbre de syntaxe abstraite BNF)

• Représentation unique du texte source : l’analyse doit être


déterministe
:=
La structure hiérarchique d'un programme est
exprimée a l'aide de règles

− Tout identificateur est une expression ab +


− Tout nombre est une expression
− Si expr1 et expr2 sont des expressions alors * 20
expr1 expr2 est une expression
y x

STIC A - Systèmes Informatiques 26 Département Informatique, École Navale


ANALYSE SÉMANTIQUE

• L’analyse syntaxique peut s’avérer insuffisante


– Par exemple : 3 + true > 2 est syntaxiquement correct

• Nécessite d'une analyse sémantique qui vérifie la présence


d'erreurs d'ordre sémantique incluant notamment
– Vérification de typage
– Vérification des déclarations

• L’analyse sémantique annote l’arbre abstrait avec des informations


qui préparent la génération de code (ex : adresses mémoire)
– Quels sont les objets manipulés et leurs propriétés ? type, durée de
vie, taille, adresse
– Contrôle la cohérence dans l'utilisation des objets : erreur de type,
absence de déclarations, déclarations multiples, déclarations inutiles,
expressions incohérentes

STIC A - Systèmes Informatiques 27 Département Informatique, École Navale


PARTIE SYNTHÈSE

• La partie synthèse génère le programme cible à partir de la


représentation intermédiaire résultante de la partie analyse

• Génération du code intermédiaire


– Utilisation de variables temporaires
– Choix de l'ordre pour faire un calcul

• Optimisation du code
– Amélioration du code intermédiaire
– Réduction du nombre de variables et d'instructions

• Génération du code
– Choix des emplacements mémoire pour les variables
– Assignation de variables aux registres

STIC A - Systèmes Informatiques 28 Département Informatique, École Navale


TABLE DES SYMBOLES

• Le compilateur manipule une table des symboles qui contient


toutes les informations sur les propriétés des objets du
programme
– Chaque identifiant (variable) a une entrée dans la table des symboles
– Enregistre les identifiants et les attributs (emplacement mémoires,
type, portée)

• L'analyseur lexical crée une entrée dans la table des symboles a


chaque fois qu'il rencontre un nouvel identificateur

• L'analyseur sémantique se sert de la table des symboles pour


vérifier la concordance des types

nom type taille adresse


A entier 4 octets (0)H
B entier 4 octets (4)H

STIC A - Systèmes Informatiques 29 Département Informatique, École Navale


AUTRES ELÉMENTS DE LA CHAINE DE PRODUCTION

• Un éditeur de liens est un logiciel qui permet de combiner


plusieurs modules objet obtenus par compilation séparée pour
construire un seul programme exécutable

• Une bibliothèque logicielle est un ensemble de fonctions compilées


regroupées dans un fichier
– Regroupées par thème (mathématiques, graphiques, fonctions
systèmes)
– Prédéfinies et réutilisables : le programmeur n’a pas à réécrire le
code; il utilise la fonction fournie (par exemple SQRT())

Eclipse Compilateur Editeur de liens


[Link] hello.o
(source) (ensemble de
programmes objet) [Link] : programme
exécutable enregistré sur
le disque

[Link] Bibliothèques
Chargeur
Exécutable en mémoire

STIC A - Systèmes Informatiques 30 Département Informatique, École Navale

Vous aimerez peut-être aussi