Vous êtes sur la page 1sur 29

Algorithmique et structures de donnes

Chane de compilation, structure d'un programme et


lments de syntaxe

Licence 3
Textes Numriques Multilingues
smilauer@cetlef.fr
31/10/2011

Terminal UNIX

Chane de compilation

EDI

Structure d'un programme

lments de syntaxe

Terminal UNIX - commandes de base 1/3


1) arborescence UNIX
pwd

man pwd
man ls

ls
ls -l
ls -la
cd
cd
cd
cd
cd

2) commande man

touche q pour quitter


3) consulter le contenu d'un fichier

/
..
chemin absolu
chemin relatif

utiliser tabulation pour auto-compltion

cat fichier
less fichier
hexdump fichier

Terminal UNIX

Chane de compilation

EDI

Structure d'un programme

lments de syntaxe

Terminal UNIX - commandes de base 2/3


4) modifier le contenu d'un fichier
nano fichier
hexedit fichier

5) crer un fichier vide


touch fichier

6) effacer un fichier
rm -i fichier

7) crer un rpertoire
mkdir rpertoire

8) effacer un rpertoire
rm -di rpertoire

9) effacer un rpertoire et son contenu


rm -dir rpertoire

Terminal UNIX

Chane de compilation

EDI

Structure d'un programme

Terminal UNIX - commandes de base 3/3


10) copier un fichier
cp fichier_source fichier_cible

11) copier un rpertoire


cp -a rpertoire_source rpertoire_cible

12) renommer un fichier ou un rpertoire


mv source cible

lments de syntaxe

Terminal UNIX

Chane de compilation

EDI

lments de syntaxe

Structure d'un programme

Compilation
traduire le code source en langage machine
signaler les erreurs dans le code source

Compilation

bonjour.cpp

if (x == y) i = 10;

bonjour

01100100100010111010100101010100010001

Terminal UNIX

Chane de compilation

EDI

Structure d'un programme

lments de syntaxe

Compilateurs
Compilateurs
de nombreux compilateurs disponibles pour les diffrents systmes d'exploitation (gcc, intel,
borland, visual C++, etc)

g++
Compilateur C++ au sein de gcc
utilise sous les systmes bas sur Unix (Linux, Mac Os X, Cygwin)
libre de droit
mise jour et entretien rguliers

Terminal UNIX

Chane de compilation

EDI

lments de syntaxe

Structure d'un programme

Chane de compilation
plusieurs outils sont mis en oeuvre successivement pendant la compilation.
1

Prprocesseur

bonjour.cpp

if (x == y) i = 10;

Compilation

Assemblage

Linker

bonjour

01100100100010111010100101010100010001

Terminal UNIX

Chane de compilation

EDI

lments de syntaxe

Structure d'un programme

Commandes de compilation avec g++

Prprocesseur

bonjour.cpp

compilation directe

g++ fichier_source

Compilation

Assemblage

Linker

bonjour

Terminal UNIX

Chane de compilation

EDI

lments de syntaxe

Structure d'un programme

Commandes de compilation avec g++

Prprocesseur

Compilation

Assemblage

bonjour.cpp

compilation directe avec un fichier excutable nomm (output)

g++ fichier_source -o fichier_excutable

Linker

bonjour

Terminal UNIX

Chane de compilation

EDI

Structure d'un programme

Commandes de compilation avec g++

1
Prprocesseur

Compilation

Assemblage

bonjour.cpp
bonjour.cpp
bonjour.i

arrter la compilation aprs l'excution du prprocesseur

g++ -E fichier_source -o fichier.i

Linker

lments de syntaxe

Terminal UNIX

Chane de compilation

EDI

Structure d'un programme

lments de syntaxe

Commandes de compilation avec g++

2
Prprocesseur

Compilation

Assemblage

Linker

Attention !
bonjour.cpp
bonjour.cpp
bonjour.s

arrter la compilation aprs la traduction en assembleur

g++ -S fichier_source -o fichier.s

Les erreurs de compilation sont


identifies cette tape.
Erreurs de syntaxe et
avertissements.
... pas de contrle smantique

Terminal UNIX

Chane de compilation

EDI

Structure d'un programme

Commandes de compilation avec g++

3
Prprocesseur

Compilation

Assemblage

Linker

bonjour.cpp
bonjour.cpp
bonjour.o

arrter la compilation aprs l'assemblage (production des fichiers objet)

g++ -c fichier_source -o fichier.o

lments de syntaxe

Terminal UNIX

Chane de compilation

EDI

lments de syntaxe

Structure d'un programme

Commandes de compilation avec g++

4
Prprocesseur

Compilation

Assemblage

Linker

bonjour
bonjour.cpp

bonjour
bonjour.cpp

dition des liens entre les diffrents fichiers objets et les bibliothques de fonctions requises

g++ fichier_source -o fichier

Terminal UNIX

Chane de compilation

EDI

Structure d'un programme

Environnement de dveloppement intgr


IDE - Integrated Devellopment Environment
logiciel permettant un dveloppement efficace et gestion des projets complexes
Composants d'un IDE
un diteur de texte avec coloration syntaxique et auto-compltion
un gestionnaire des projets multi-fichiers
une bibliothque des projets type
un compilateur (facile paramtrer)
intgration d'une console pour l'excution du programme
un debugger pour vrifier le code

lments de syntaxe

Terminal UNIX

Qt Creator

Chane de compilation

EDI

Structure d'un programme

lments de syntaxe

Terminal UNIX

Chane de compilation

EDI

Structure d'un programme

lments de syntaxe

Structure d'un programme

Terminal UNIX

Chane de compilation

EDI

Structure d'un programme

lments de syntaxe

Structure d'un programme C++


Le texte d'un programme
Une suite d'instructions dont le but est d'effectuer un traitement sur des donnes.
Fonction
Chaque programme C++ est compos d'un ou de plusieurs blocs d'instructions.
On appelle ces blocs les fonctions.
Chaque fonction commence par une ligne d'en-tte qui est suivi d'un bloc d'instructions
entre accolades.
Chaque programme doit contenir au moins une fonction qui est appele la fonction principale.

Attention !
On appelle aussi la fonction principale "le programme principal" et les autres fonctions "des
sous-programmes"

Terminal UNIX

Chane de compilation

EDI

Le programme C++ le plus court ...

... qui ne fait rien

int main()
{}

point d'entre du programme : fonction


principale. Chaque programme C++ doit
contenir la fonction main !

Structure d'un programme

lments de syntaxe

Terminal UNIX

Chane de compilation

EDI

Structure d'un programme

lments de syntaxe

Le programme salut

ordre au prprocesseur - entte

#include <iostream>
instruction

int main()
{
!std::cout << "Salut !\n";
}
point d'entre du programme : fonction
principale.
Chaque programme C++ doit contenir la
fonction main !

Terminal UNIX

Chane de compilation

EDI

Structure d'un programme

lments de syntaxe

Programme avec une seule fonction


/* ce programme lit deux valeurs entires sur l'entre standard
et imprime la plus grande des deux
entre : 2 valeurs entires
rsultat : la plus grande
*/
#include<iostream>
int main()
{
//dclaration des variables utilises dans notre programme

commentaires
ordre au prprocesseur - entte
point d'entre du programme : fonction
principale. Chaque programme C++ doit
contenir la fonction main !

int n1, n2, nmax;


//acquisition des donnes
std::cout << "Tapez deux valeurs entires : \n";
std::cin >> n1;
std::cin >> n2;

accolade ouvrante : dbut du bloc de code


dfinissant la fonction principale
instruction de dclaration

//calcul du plus grand


if(n1 > n2)
nmax = n1;
else
nmax = n2;

instructions excutables

//impression du rsultat
std::cout << "La valeur la plus grande est " << nmax << "\n";
}

accolade fermante : fin du bloc de la


fonction principale

Terminal UNIX

Chane de compilation

EDI

Structure d'un programme

lments de syntaxe

Programme avec deux fonctions


#include<iostream>
//dclaration de la fonction trouve_max
int trouve_max(int x, int y)
{
if(x > y)
return (x);
else
return (y);
}
int main()
{
//dclaration des variables utilises dans notre programme

dfinition d'une autre fonction (un sousprogramme) qui renvoie des valeurs la
fonction main)
point d'entre du programme : fonction
principale.

int n1, n2, nmax;


//acquisition des donnes
std::cout << "Tapez deux valeurs entires : \n";
std::cin >> n1;
std::cin >> n2;
//appel de la fonction qui calcule le plus grand
nmax = trouve_max(n1,n2);
//impression du rsultat
std::cout << "La valeur la plus grande est " << nmax << "\n";
}

appel de l'autre fonction au sein de la


fonction principale (programme principal)

Terminal UNIX

Chane de compilation

EDI

Structure d'un programme

lments de syntaxe

lments de syntaxe

Terminal UNIX

Chane de compilation

EDI

Structure d'un programme

lments de syntaxe

lments de syntaxe C++

Alphabet

Les symboles qui peuvent tre utiliss.

Les rgles pour la formation des units lexicales.

Units lexicales

Dfinition des classes des units lexicales

Les rgles pour la combinaison des units lexicales


au sein des units syntaxiques (instructions)

Units syntaxiques

Types des units syntaxiques

Terminal UNIX

Chane de compilation

EDI

Structure d'un programme

Alphabet C++

52 caractres alphabtiques minuscules et majuscules


10 chiffres
caractre espace
29 caractres graphiques :
{ } ( ) [ ] ' " ; , . = - + / % < > & | ~ \ : ? ! # ^ * _

Attention !
On distingue entre les majuscules et le minuscules (sensible la casse)
Les caractres fin de ligne et tabulation sont considrs comme espace

lments de syntaxe

Terminal UNIX

Chane de compilation

EDI

lments de syntaxe

Structure d'un programme

Alphabet C++
ASCII (ISO 646)
0

NUL
00

SOH
01

STX
02

ETX
03

EOT
04

ENQ
05

ACK
06

BEL
07

BS
08

HT
09

LF
0A

VT
0B

FF
0C

CR
0D

SO
0E

SI
0F

10

11

12

13

14

15

DLE
10

DC1
11

DC2
12

DC3
13

DC4
14

NAK
15

SYN
16

ETB
17

CAN
18

EM
19

SUB
1A

ESC
1B

FS
1C

GS
1D

RS
1E

US
1F

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

SP
20

"

&

'

32

21

22

23

24

25

26

27

28

29

2A

2B

2C

2D

2E

2F

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

<

>

30

31

32

33

34

35

36

37

38

39

3A

3B

3C

48

49

50

51

52

53

54

55

56

57

58

59

40

41

42

43

44

45

46

47

48

49

64

65

66

67

68

69

70

71

72

50

51

52

53

54

55

56

57

58

3E

3F

60

3D
61

62

63

4A

4B

4C

4D

4E

4F

73

74

75

76

77

78

79

59

5A

5B

5C

5D

5E

5F

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

m
6D

6E

6F

61

62

63

64

65

66

67

68

69

6A

6B

6C

96

97

98

99

101

102

103

104

105

106

107

108

109

110

111

70

71

72

73

74

75

76

77

78

79

7A

7B

7C

7D

7E

DEL
7F

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

60

127

Terminal UNIX

Chane de compilation

EDI

lments de syntaxe

Structure d'un programme

Units lexicales
On distingue cinq classes d'units lexicales (tokens) :
classe

exemples

mots cls (les mots rservs)

int

if

else

identificateurs de variables et de fonctions

max

constantes

10

-8

true

oprateurs

sparateurs

for

resultat
'p'

short

'\n'

>=

"bonjour"

Terminal UNIX

Chane de compilation

EDI

Structure d'un programme

lments de syntaxe

Units lexicales : mots cls


and

and_eq

asm

auto

bitand

bitor

bool

break

case

catch

char

class

compl

const

const_cast

continue

default

delete

do

double

dynamic_cast

else

enum

explicit

export

extern

false

float

for

friend

goto

if

inline

int

long

mutable

namespace

new

not

not_eq

operator

or

or_eq

private

protected

public

register

reinterpret_cast

return

short

signed

sizeof

static

static_cast

struct

switch

template

this

throw

true

try

typedef

typeid

typename

union

unsigned

using

virtual

void

volatile

wchar_t

while

xor

xor_eq

Attention !
Il n'est pas possible d'employer un mot cl pour nommer une variable.

Terminal UNIX

Chane de compilation

EDI

Units syntaxiques - instructions


Instruction
une suite de tokens
unit syntaxique minimale d'un programme
On distingue :
Instruction simple
une squence de tokens termine par le sparateur ;
instructions de dclaration et d'affectation
instructions comportants des ordres d'E/S
Instruction complexe
structures conditionnelles et itratives

Structure d'un programme

lments de syntaxe

Terminal UNIX

Chane de compilation

EDI

lments de syntaxe

Structure d'un programme

Units syntaxiques - instructions

instruction simple

token
sparateur
;

un bloc d'instructions

instruction