1
Les langages.
Si tu ne joues pas
avec les mots
ils se joueront
de toi !
Nous allons consid´
erer des listes finies de symboles, et des ensembles homog`
enes de telles listes : d’une
fac¸on g´
en´
erale une liste finie de symboles s’appellera un
mot
et un ensemble de mots s’appellera un
langage
. Cependant, ce vocabulaire n’est pas adapt´
e`
a toutes les situations :
•Lorsque les symboles sont des caract`
eres, ces listes sont bien des mots au sens courant du terme, mais
un ensemble de mots constitue simplement un lexique. Les mots d’un mˆ
eme ensemble “homog`
ene” con-
stituent
une unit´
elexicale
. Dans le cas qui nous int´
eresse principalement, les unit´
es lexicales sont
les lan-
gages r´
eguliers
dont la d´
efinition se fait au moyen d’expressions formelles appel´
ees
expressions r´
eguli`
eres
:
une telle expression est un “mod`
ele” (ou un “motif”) des mots qui appartiennent `
al’unit
´
e qu’elle d´
efinit.
L’analyse lexicale
,c’est–
`
a–dire l’op´
eration qui consiste `
ad
´
eterminer `
a quelle unit´
e lexicale appartient un
mot donn´
e, se fait au moyen d’
automates finis
. LEX est un utilitaire qui traduit une sp´
ecification d’unit´
es
lexicales donn´
ees sous la forme d’expressions r´
eguli`
eres, en un programme d’analyse lexicale, dont le
fonctionnement est bas´
esurlaconsid
´
eration d’automates finis.
•Lorsque les symboles sont d´
ej`
a des mots (au sens du premier point) ces listes sont
des phrases
et un
ensemble sp´
ecifi´
e de telles phrases constitue alors
un langage
:lesr
`
egles qui r´
egissent la formation d’une
phrase d’un langage forment une
grammaire
du langage en question. Les grammaires des langages de
programmation sont simples car ce sont essentiellement des processus inductifs.
L’analyse syntaxique
,
c’est–`
a–dire la mise en ´
evidence de la structure d’une phrase, se fait au moyen d’
automates `
apile
:YACC
est un utilitaire qui traduit la donn´
ee d’une grammaire en un programme d’analyse syntaxique dont le
fonctionnement est bas´
esurlaconsid
´
erationd’unautomate`
apile.
Lesanalyseurssontactifs,c’est–
`
a–dire capables d’effectuer une action `
a chaque reconnaissance d’une
unit´
elexicaleoud’uner
`
egle de grammaire : en particulier, un analyseur lexical (par exemple, produit par
LEX) devra alimenter un analyseur syntaxique (par exemple, produit par YACC) en unit´
es lexicales; ce
dernier est souvent charg´
ed’und
´
ebut de traduction.
Ces deux analyses, appliqu´
ees `
a
un programme source
, sont les premi`
eres ´
etapes de
la compilation
.L’´
etape
suivante est
l’analyse s´
emantique
qui attribue un “sens” au r´
esultat obtenu. Apr`
es cette phase analytique,
vient la production d’
un code machine
:eng
´
en´
eral, on passe par
un code interm´
ediaire
,ind
´
ependant de
toute machine, qui permet d’effectuer diverses op´
erations importantes, notamment
l’optimisation
(une
expression optimiste qui signifie plutˆ
ot “am´
elioration”).
ne telle pr´
esentation de la compilation est tr`
es sch´
ematique (en particulier, les analyses ne sont
pas ind´
ependantes l’une de l’autre), mais il faut savoir que les outils qui sont `
a notre disposition
(les th´
eories d´
evelopp´
ees dans le cours ainsi que LEX et YACC, qui en appliquent une grande partie)
permettent effectivement de construire des compilateurs pour des langages non triviaux.
Dans ce chapitre, nous donnons les notions de base relatives aux langages : il s’agit de poser quelques
d´
efinitions et de v´
erifier des propri´
et´
es qui seront utiles dans toute la suite.
Th´eorie des langages. M.M Institut Galil´ee 2004