Académique Documents
Professionnel Documents
Culture Documents
CHAPITRE 2
OBJECTIFS
NATEURS.
On désigne par langage tout système de signes vocaux (parole) ou graphiques (écri-
ture) permettant aux humains d’exprimer leur pensée et de communiquer entre eux.
Une telle définition fait davantage référence à la notion de langage naturel (ensemble
fini de mots formés à partir d’un alphabet, suivant une syntaxe stricte et riche en
sémantique), dans la mesure où elle implique l’homme plutôt que l’ordinateur dans la
manipulation des signes. Les langages de programmation, qui servent à commander les
circuits des ordinateurs, s’inspirent de la même réalité : ils permettent à l’homme de
communiquer avec la machine. En effet, on appelle langage de programmation, en
informatique, un ensemble de signes (ou symboles) et de règles utilisés pour program-
mer les ordinateurs. La notion de règle est liée à la syntaxe, alors que les symboles
constituent l’alphabet du langage.
L’utilisateur qui veut transmettre ses ordres à l’ordinateur le fait par l’intermédiaire de
langages de programmation. Ces derniers se situent en quelque sorte à mi-chemin entre
le langage naturel et le langage machine. En effet, ils sont suffisamment proches des
langages naturels pour que les programmes puissent être facilement écrits, compris et
modifiés. De plus, ils sont définis avec rigueur, de sorte que les programmes qui les
utilisent peuvent être traduits dans le langage machine de n’importe quel ordinateur; il
en sera question plus loin. En d’autres termes, un langage de programmation assure une
30 INTRODUCTION À LA PROGRAMMATION EN PASCAL/DELPHI
correspondance entre les opérations énoncées dans les algorithmes et les instructions
du programme qui codent ces opérations. L’ensemble des mots formés à partir de
l’alphabet constitue le vocabulaire du langage de programmation.
Les langages de programmation partagent avec les langages naturels un certain nombre
de caractéristiques qui sont de trois ordres : lexicale, syntaxique et sémantique.
Dans tout langage de programmation, on retrouve deux catégories de mots : les mots
réservés et les identificateurs. Les mots réservés (ou mots clés), comme leur nom
l’indique, sont définis par le langage et toute tentative de redéfinition de la part de
l’utilisateur donne lieu à des erreurs dites de compilation, c’est-à-dire des erreurs
générées au cours de la traduction du programme source en programme objet. À titre
LES LANGAGES DE PROGRAMMATION 31
d’exemple, on peut citer, en PASCAL, le mot BEGIN qui sert à indiquer le début d’un
bloc d’instructions et END qui en indique la fin.
Quant aux identificateurs, ce sont des mots choisis par le programmeur pour représen-
ter un objet du programme, conformément aux règles lexicales du langage. Par exem-
ple, en PASCAL, un identificateur doit nécessairement commencer par une lettre.
Ainsi, « +TARD » ne serait pas un identificateur valide, puisqu’il débute par le sym-
bole « + ».
Tout programme doit respecter la syntaxe du langage dans lequel il est écrit. On
comprendra dès lors que l’oubli d’un simple mot ou même d’un caractère dans une
instruction donne lieu à des erreurs de compilation. Ce qui contribue à rendre fasti-
dieuse la tâche de mise au point d’un programme.
Les langages de bas niveau sont plus proches de la machine que de l’homme. Ils
regroupent les langages machines et les langages d’assemblage ou assembleurs.
Le langage machine
FIGURE 2.1
PROGRAMME D’ADDITION EN LANGAGE MACHINE.
Pour des raisons de lisibilité, on peut être amené à changer la base de numération.
Ainsi, la figure 2.2 reproduit le même segment de programme, cette fois-ci dans le
système hexadécimal (base 16).
100 58 310024
101 53 310028
102 50 321040
FIGURE 2.2
CODAGE EN SYSTÈME HEXADÉCIMAL.
Par ailleurs, la plupart des utilisateurs considèrent l’ordinateur comme un outil destiné
à faciliter la résolution de leurs problèmes. La programmation en langage machine les
oblige non seulement à connaître le fonctionnement de l’outil dans les moindres détails,
mais aussi les amène souvent à consacrer plus de temps à la conception de leurs
programmes qu’à la détermination de l’algorithme de résolution. Le langage machine
apparaît donc, de tous les langages de programmation, comme celui qui est le plus
éloigné des problèmes à résoudre et le moins expressif.
34 INTRODUCTION À LA PROGRAMMATION EN PASCAL/DELPHI
Le langage d’assemblage
FIGURE 2.3
PROGRAMME D’ADDITION EN LANGAGE D’ASSEMBLAGE.
Les multiples inconvénients des langages de bas niveau ont amené les spécialistes de
l’informatique à définir une autre catégorie de langages plus proches du langage hu-
main : ce sont les langages de haut niveau ou de troisième génération. Ils sont appelés
ainsi en raison de leur définition théoriquement indépendante de l’ordinateur sur les-
quels ils sont implantés. Dans cette catégorie, on retrouve les langages évolués destinés
à des applications variées et les langages spécialisés qui, comme leur nom l’indique, ne
se prêtent qu’à certains types d’application. Parmi les langages évolués les plus utilisés
actuellement, on peut citer : FORTRAN, BASIC, COBOL, PASCAL et C. Pour ce qui
est des langages spécialisés, mentionnons SIMULA et GPSS. Dans cette section, nous
allons passer en revue ces différents langages, ainsi que les notions de génération de
langages de programmation et de machine-langage.
LES LANGAGES DE PROGRAMMATION 35
Le langage FORTRAN
FORTRAN répond bien aux exigences d’un langage évolué. En effet, il permet de
coder de manière plus naturelle les opérations qui doivent être exécutées par l’ordinateur.
À titre d’exemple, l’addition de deux nombres peut être réalisée par l’instruction
FORTRAN suivante :
SOMME = X + Y
Reçu avec méfiance par la communauté informatique, ce langage avait rendu moins
laborieuse la tâche de mise au point des programmes. Aussi, revient-il à FORTRAN le
mérite d’avoir été le premier langage utilisé sur plusieurs ordinateurs de fabricants
différents : c’est donc le premier langage indépendant de la machine. FORTRAN reste
néanmoins un langage fort peu recommandé pour les ordinateurs personnels, car trop
encombrant.
Le langage COBOL
ADD X TO Y GIVEN Z
36 INTRODUCTION À LA PROGRAMMATION EN PASCAL/DELPHI
Ensuite, il accorde à la description des données une place aussi grande que celle qui est
réservée aux instructions exécutables du programme.
Le langage BASIC
BASIC est un langage très populaire auprès des programmeurs débutants. Son utilisa-
tion s’est de beaucoup accrue avec l’avènement des ordinateurs personnels sur lesquels
il en existe toujours une version.
Le langage PASCAL
Le langage PASCAL, qui tient son nom de l’écrivain et philosophe français Blaise
Pascal, a fait son apparition en 1972. C’est un langage évolué, conçu par N. Wirth, dont
LES LANGAGES DE PROGRAMMATION 37
Le langage C
Le langage C (après B) est un langage de programmation à but général, qui a fait son
apparition en 1972. Ses concepteurs n’ont pas voulu, à proprement parler, en faire un
langage de très haut niveau, encore moins un langage spécifique à un domaine
d’application particulier. Toutefois, son absence de restrictions alliée à sa généralité lui
donne toutes les propriétés d’un puissant langage de haut niveau. C’est donc un langage
qui est recommandé à la fois pour les applications scientifiques, d’ingénierie et de
développement de logiciel. Aussi, est-il souvent utilisé pour la programmation de
systèmes d’exploitation, de systèmes de base de données et de traitement de texte.
Le langage GPSS
Le GPSS (General Purpose Simulation System) est le premier langage mis au point
pour simuler par ordinateur des événements tels que les arrivées de bateaux dans les
ports, le contrôle de la circulation dans les villes, dans les aéroports, les hôpitaux, etc.
Il fut commercialisé par IBM en 1961 et reste encore très utilisé aujourd’hui, comme
langage spécialisé de simulation.
Le langage SIMULA
SIMULA, en tant que langage spécialisé, est aujourd’hui encore assez utilisé. La ri-
chesse de sa structure en fait un langage très approprié pour la programmation et le
traitement de files d’attente, lors de la simulation d’événements de toutes sortes.
De nos jours, le domaine des langages de programmation est très actif. En effet, on
observe à travers le monde une intense activité de recherche et de conception de
LES LANGAGES DE PROGRAMMATION 39
nouveaux langages, devant répondre à des besoins aussi bien généraux que spécifiques.
Qu’il s’agisse de langages évolués à buts généraux ou de langages spécialisés, ils sont
tous considérés comme des langages de haut niveau, faisant partie d’une même géné-
ration de langages de programmation : la troisième, après les langages machines et les
langages d’assemblage. Ils se caractérisent tous par le fait qu’ils sont conceptuellement
indépendants des ordinateurs sur lesquels ils sont implantés et relativement proches du
langage humain. D’où la nécessité de recourir à un traducteur (compilateur ou
interpréteur) pour la conversion des énoncés de programme en instructions du langage
machine.
Il va de soi que les instructions des langages de quatrième génération sont de type
impératif (quoi faire), plutôt qu’algorithmique (comment faire). Les langages de ma-
nipulation de données comme SQL (Structured Query Language), les environnements
statistiques SPSS (Statistical Package for the Social Sciences) et SAS (Statistical
Analysis System), ainsi que les générateurs de programmes en sont des exemples. Ces
langages sont généralement plus conviviaux et plus faciles à utiliser que les autres.
Toutefois, ils n’ont pas réussi à déloger les langages de troisième génération dont la
prédominance est nette en tant qu’outil généralisé de résolution de problème.
pour convertir les programmes écrits dans son langage de base (programme source) en
programmes en langage machine (programme objet). Ceci permet de gagner en temps
d’exécution, mais aussi de perdre en flexibilité, puisqu’on ne peut guère utiliser d’autres
langages sur la machine en question.
C’est avec l’essor de l’intelligence artificielle que sont apparues de telles machines.
Elles étaient conçues de manière à satisfaire de nouvelles contraintes de rapidité basées,
non plus sur le nombre d’instructions par seconde (IPS), mais plutôt sur le nombre
d’inférences logiques par seconde (LIPS).
Tout compte fait, l’atteinte de tels objectifs semble de plus en plus liée à la définition
de nouvelles architectures d’ordinateur, rompant fondamentalement avec celle de von
Neumann. L’avenir de l’intelligence artificielle en général et celle du traitement auto-
matique des connaissances en particulier en dépendent.
En plus de leur proximité du langage naturel, une autre façon de classifier les langages
consiste à les regrouper selon le type de programmation qu’ils permettent de réaliser.
Ce qui nous amène à distinguer la programmation procédurale, la programmation
fonctionnelle, la programmation logique et la programmation par objets.
– les procédures fonction, dont l’appel ne fait que retourner une valeur éventuelle-
ment attribuable à une variable.
Les langages les plus populaires actuellement dans l’industrie sont de type procédural.
On peut citer, entre autres, FORTRAN, COBOL, BASIC, PASCAL et C.
Chaque fois qu’on remplace x par un nombre entier et qu’on évalue l’expression, on
obtient un nombre unique. Cette expression peut être assimilée à la machine de la
figure 2.4 qui, pour tout élément x soumis en entrée, en produit le successeur.
x (x + 1)
SUCC
FIGURE 2.4
MACHINE À SUCCESSEURS.
42 INTRODUCTION À LA PROGRAMMATION EN PASCAL/DELPHI
On peut constater que x et son successeur sont tous deux des entiers naturels. Dans le
langage mathématique, on parlerait d’une fonction Succ de l’ensemble des entiers
naturels vers lui-même, notée :
Succ: N → N
x |→ (x + 1)
Ce qui se lit : F est une fonction définie dans A à valeur dans B, qui à tout x pris dans
A fait correspondre un et un seul F(x) pris dans B. A et B sont respectivement les
domaines de départ et d’arrivée de la fonction. Intuitivement, une fonction est une
manière d’associer de façon unique des éléments d’un ensemble (de départ) à des
éléments d’un autre ensemble (d’arrivée).
Il existe une fonction particulière, appelée fonction identité et notée I, qui possède la
propriété de laisser inchangée la variable qui lui sert d’argument. On peut le définir de
la manière suivante :
I(x) = x
Toujours en LISP, on a :
CAR(A, B, C) = A
CDR(A, B, C) = (B, C)
CAR(CDR(A, B, C) = CAR(B, C) = B
Les programmes fonctionnels sont en général plus courts, mais plus abstraits que leurs
équivalents procéduraux. De plus, ils se prêtent mieux à une analyse et à une manipu-
lation formelles, ce qui en font des programmes relativement faciles à maintenir. Quant
aux langages fonctionnels, ils sont dotés d’une grande capacité de traitement symbo-
lique. D’où leur adéquation à résoudre les problèmes d’intelligence artificielle où la
manipulation porte sur des données symboliques plutôt que numériques.
La programmation logique s’est développée à partir des clauses de Horn. Ce sont des
formules de la forme :
(implique)
(A1 & A2 & .... & An) → B
où les Ai et B sont des termes, c’est-à-dire soit des constantes ou des variables, soit des
expressions p(t1,..., tn) dans lesquelles p désigne un prédicat et les ti sont eux-mêmes
des termes.
Un très grand nombre de connaissances peuvent être décrites de cette manière. Par
exemple, la formule qui définit la transitivité des liens de parenté (les parents de nos
parents sont nos grands-parents) est une clause de Horn :
parent(x, y) & parent(y, z) → grands-parents(x, z)
Dans cette formule, parent(x, y) signifie que x est le parent de y. En outre, même une
proposition élémentaire, un fait, peut se présenter comme une clause de Horn dont la
partie condition est remplacée par la valeur logique VRAI :
VRAI → B
Voici des données exprimant des relations entre plusieurs individus d’une même fa-
mille :
VRAI → mère(Laurie, Stéphane)
VRAI → frère(Stéphane, Sabine)
VRAI → père(Samuel, Stéphane)
VRAI → mère(Laurie, Sabine)
La programmation logique se fonde sur le principe que programmer, c’est prouver. Elle
utilise un mode déclaratif, dans lequel le problème à résoudre est décrit de façon
suffisamment précise, mais sans donner explicitement la manière de le résoudre.
L’interprète du langage se charge alors de trouver l’ensemble des solutions qui satis-
font cette description. Par exemple, si l’on désire connaître les parents de Sabine, il
suffit de poser la question :
parents(x, Sabine)
LES LANGAGES DE PROGRAMMATION 45
et l’on obtiendra l’ensemble des solutions, c’est-à-dire l’ensemble des x qui correspon-
dent à ce but, dans les connaissances exprimées sous forme de clauses de Horn :
x = Laurie
x = Samuel
Imaginons que l’on veuille obtenir l’ensemble des couples (x, y) tels que x est mère de
y. Il suffit de poser la question :
mère(x, y)
et le système affichera :
x = Laurie, y = Stéphane
x = Laurie, y = Sabine
Au début des années 80, les Japonais ont fait part au monde entier de leur ambitieux
projet de mise au point d’ordinateurs de la cinquième génération, orientés vers les
applications d’intelligence artificielle. Le langage de base retenu pour de telles machi-
nes a été PROLOG. Depuis, on observa un regain d’intérêt grandissant pour ce langage.
On en a pour preuve la multiplicité des équipes de recherche qui s’y consacrent et la
prolifération des versions de ce langage qui, somme toute, se prêtent bien à l’exécution
rapide d’inférences logiques.
La programmation par objets, comme son nom l’indique, repose sur la notion d’objet.
On retrouve dans la littérature plusieurs termes qui s’apparentent à ce concept. En effet,
dans les travaux sur la mémoire en psychologie cognitive, on parle souvent de schéma.
Dans le domaine du traitement des langages naturels, on emploie tour à tour les termes
frame, script et prototype, les deux premiers n’ayant pas d’équivalents français. De nos
jours, le parti semble être pris pour utiliser le terme objet dont la connotation s’avère
bien la plus générale.
On désigne par objet une structure de connaissances constituée d’un certain nombre
d’aspects ou d’attributs. Ces derniers ne sont autres que les noms des propriétés qui
caractérisent l’objet. Par exemple, un objet Employé peut admettre pour attributs Nom,
46 INTRODUCTION À LA PROGRAMMATION EN PASCAL/DELPHI
Sexe, Âge, Adresse, Profession et Numéro. De plus, à chaque aspect on peut associer
des facettes telles que valeurs-possibles qui définit le domaine des valeurs que peut
prendre cet aspect, ou valeurs-défaut qui spécifie la valeur par défaut de celui-ci. Ainsi,
on peut attribuer à Âge la valeur par défaut 45.
Les langages orientés objets sont devenus depuis quelques années un outil de base de
la représentation des connaissances en intelligence artificielle. Ils possèdent deux pro-
priétés fondamentales. D’abord, ils rendent possible la description d’objets hiérarchi-
sés, avec transmission de propriétés en provenance des parents. D’autre part, ils per-
mettent dans une certaine mesure de tirer parti des avantages de la programmation
procédurale, par le biais des attachements procéduraux, appelés démons, intégrés aux
objets. Par exemple, un Employé cadre, ayant Employé pour parent dans une hiérar-
chie, peut être décrit par les attributs suivants : Nom, Sexe, Adresse, Âge, Fonction.
Chacun de ces attributs peut avoir une valeur et une valeur par défaut. La valeur de
l’attribut Âge peut être prise égale à 45, par transmission de la valeur par défaut de son
parent Employé. On peut également avoir une facette appelée Salaire, qui est en fait un
démon permettant de calculer le salaire de cet employé cadre.