Professional Documents
Culture Documents
1. Introduction
2. Lexique
1. Identificateurs et Mots-cls
2. Constantes
3. Symboles spciaux
4. Commentaires
3. Syntaxe
1. Dclarations
3. Expressions
1. Oprateurs arithmtiques
2. Oprateurs relationnels
3. Oprateurs logiques
4. Priorits
4. Instructions
Introduction
actions ;
variables et affectation ;
Pour cela, nous allons expliquer comment dcrire avec prcision un langage de
programmation.
Comment dcrire un langage de programmation
Lorsque l'on apprend une langue (par exemple l'anglais), on doit matriser :
Une bonne faon de mettre en vidence les trois niveaux ci-dessus est de prendre
des exemples de (morceaux de) programmes errons (ici en Pascal) :
1 program p;
2 var 12x, y : boolean;
3 t : array [1..10] of integer;
4 begin
5 if y <> 0
6 else t[11] := 0;
7 end.
La ligne 2 contient une erreur lexicale : 12x n'est pas un identificateur lgal en
Pascal. La ligne 5/6 contient une erreur syntaxique : la construction if...else n'est
pas lgale en Pascal (il faut une partie then). La ligne 5 contient galement une
erreur smantique : la variable y est dclare boolenne, on ne peut donc la
comparer l'entier 0. Enfin la ligne 6 contient une autre erreur smantique : 11 n'est
pas un indice valide pour le tableau t. Ces deux erreurs smantiques sont de nature
diffrente : la premire peut tre dtecte simplement en regardant le texte du
programme, on dit qu'il s'agit d'une erreur de smantique statique. La seconde ne
peut tre dtecte (dans le cas gnral) que lorsque le programme s'excute, on dit
qu'il s'agit d'une erreur de smantique dynamique. Nous reviendrons sur ces notions
en temps utile.
Dans la suite de ce chapitre, nous nous intressons aux lments usuels des lexiques
des langages de programmation impratifs et la description de la syntaxe des
langages.
Lexique
Les units lexicales d'un langage dcrivent ses composants de base, les "mots" de
son vocabulaires. La plupart des langages sont fonds sur des vocabulaires trs
proches. Nous allons ici dcrire les principales catgories d'units lexicales et
dtailler le cas du langage Pascal.
Identificateurs et Mots-cls
Les "mots" les plus vidents dans un programme sont les identificateurs et les
mots-cls. Les identificateurs sont utiliss pour dnoter des "objets" du
programme : variables, fonctions, types, etc. Les mots-cls sont utiliss pour
faciliter la reconnaissance de la structure du programme. Par exemple en Pascal, les
mots-cls begin et end dlimitent des blocs d'instructions.
Les mots-cls sont des mots particuliers qui ne peuvent pas tre utiliss comme
identificateurs. En Pascal, la liste des mots-cls est la suivante :
program const var type function procedure begin end
array record set of file
if then else while do repeat until case for to downto
and or not in div mod
goto label nil packed with
Constantes
Les constants sont de mots qui dsignent des valeurs d'un type prdfini du
langage. Typiquement, on trouve les constantes entires, relles, boolennes,
caractres et ventuellement chanes. Ce qui suit concerne le langage Pascal :
Les constantes caractres sont notes entre simple quotes. Le caractre simple
quote est not en rptant la quote :
'a' '9' ';' ''''
Les constantes chanes de caractres sont galement notes entre simple quotes,
avec rptition des quotes ventuelles :
'Bonjour' 'Commet allez-vous aujourd''hui'
Dans d'autres langages, par exemple C, on utilise des doubles quotes pour les
chanes de caractres, et le caractre '\' ("backslash") pour "protger" les doubles
quotes et indiquer des caractres spciaux :
"Il dit : \"bonjour !\""
"Un deux\ntrois quatre" "\n" indique un retour la ligne
"voici un backslash : \\"
Symboles spciaux
D'autres encore sont utiliss pour sparer des instructions ou grouper des
expressions :
, sparer les lments d'une liste
; sparer des instructions
( ) grouper des sous-expressions
L'espace sert de sparateur, c'est--dire qu'il permet de sparer des units lexicales
adjacentes. Par exemple
typet=array[1..10]ofinteger
En Pascal, les fins de ligne et les tabulations sont galement des sparateurs.
Commentaires
Les commentaires sont des parties du programme qui sont ignores du compilateur
et qui ne changent donc rien au sens du programme. Ils sont cependant trs
importants pour documenter le programme, notamment en vue de son utilisation
par quelqu'un d'autre ou de sa modification ultrieure (il est trs rare d'crire un
programme que l'on ne modifie plus jamais et que l'on ne rutilise pas par ailleurs).
Syntaxe
La syntaxe d'un langage dcrit les faons correctes d'assembler des units lexicales
pour crire des programmes. Un programme syntaxiquement correct peut encore
tre erron s'il contient des erreurs smantiques.
Pour dcrire la grammaire d'une langue naturelle, on utilise parfois des schmas (et
le plus souvent des rgles). Par exemple, un phrase en franais peut tre compose
d'un groupe sujet, d'un groupe verbal, d'un groupe complment et d'un point final.
Le groupe sujet est constitu d'un article, d'un adjectif ventuel et d'un nom ou d'un
nom et d'un adjectif. Le groupe verbal est compos d'un auxiliaire ventuel et d'un
verbe. Le groupe complment est compos d'un prposition ventuelle et d'un
groupe sujet. Par exemple, les phrases suivantes correspondent cette description :
Le chat mange la souris. Le cadavre exquis boira le vin nouveau. Le partiel aura
lieu dans le grand amphi.
La figure ci-dessous explicite la structure syntaxique de la premire phrase d'aprs
les rgles de grammaire expliques ci-dessus :
Cette notation formelle n'est pas toujours facile lire. On peut utiliser une autre
reprsentation des rgles de production, les diagrammes de
Conway ou diagrammes syntaxiques :
Souvent, on trouve dans les grammaires des structures rptitives. Par exemple, un
texte est une suite de phrases. Ces structures se traduisent par des rgles rcursives
dans les grammaires de production, mais on peut souvent les reprsenter par des
boucles dans les diagrammes syntaxiques :
<texte> -> <phrase>
| <phrase> <texte>
Les langages de programmation ont une structure la fois plus simple et plus stricte
que les langues naturelles. Ils se prtent donc mieux la reprsentation par rgles
de production et diagrammes syntaxiques. Les principales structures syntaxiques
que l'on trouve dans les langages impratifs sont les suivantes :
Un type simple correspond aux types prdfinis (entier, rel, boolen, caractre),
aux types numrs et aux types intervalles. Les types composs sont les tableaux
et les enregistrements, ainsi que d'autres types que nous n'avons pas tudi
(pointeurs, ensembles, fichiers).
dfinit m comme un tableau deux dimensions dont les lments sont des nombres
complexes. Pour accder la partie relle de l'lment d'indices 2, 3, il faut crire :
m [2, 3].re
Expressions
Une expression dnote une valeur. Les expressions sont construites partir d'un
ensemble d'oprateurs. On distingue les oprateurs arithmtiques, relationnels et
logiques. La notation est proche de celle utilise en mathmatiques (attention
cependant : le produit doit tre explicitement not *).
Oprateurs arithmtiques
Ce sont les 4 oprations usuelles : +, -, *, /. En Pascal, on a galement les
oprateurs DIV et MOD pour les nombres entiers, qui reprsentent le quotient et le
reste de la division entire. Ainsi, si b != 0 :
a = (a DIV b) * b + a MOD b.
Les oprateurs * et / ont une plus grande priorit que les oprateurs + et -. Ainsi
a + b * c se lit a + (b * c).
a - b + c est valu (a - b) + c.
(a + b) * c est diffrent de a + b * c.
- a + b se lit (- a) + b.
Oprateurs relationnels
Les oprateurs relationnels permettent de comparer des valeurs d'un type simple. Ils
ont pour signature :
Ils sont tous de mme priorit. En effet, on ne peut avoir une expression de la forme
:
a<b<c
Celle-ci serait value de la faon suivante, qui provoque une erreur car le terme
entre parenthse est de type boolen mais pas le terme de droite :
(a < b) < c
Oprateurs logiques
Les oprateurs logiques portent sur les boolens. Ce sont le ou logique (OR), le et
logique (AND) et la ngation logique (NOT). Ils ont pour priorits (par ordre
croissant) : OR AND NOT.
Priorits
OR
AND
NOT
+-
*/
- unaire
Les facteurs qui constituent les oprandes d'une expression peuvent tre des
constantes, des variables, ou des appels de fonction. Ainsi, si l'on ne tient pas
compte des priorits, la syntaxe des expression peut se dcrire comme suit :
Pour prendre en compte les priorits des oprateurs, il faut dcomposer expression
en plusieurs niveaux, et donner autant de diagrammes correspondants ( faire en
exercice).
Instructions
De plus, des instructions peuvent tre groupes dans un bloc (begin-end en Pascal).
Le diagramme syntaxe des instructions Pascal est le suivant :
Les instructions case, repeat et for ne sont pas compltes dans ce diagrammes.
Elles sont laisses titre d'exercice.