Introduction aux langages et compilateurs

Notes de cours pour la section 2, chapitre 2.1 du cours SEG 2506
par Gregor v. Bochmann, February 2004 (revisé 2010, 2012, 2013, 2015)

Langues naturelles

Dans les langues, une phrase est une séquence de mots et un mot, aussi appelé lexème (unité lexicale), est une séquence de caractères (possiblement d'un seul). L'ensemble des caractères utilisés par une langue est un ensemble fini. Des phrases, il y en a une infinité (pas de limite sur leur longueur). On utilise un dictionnaire pour lister tous les mots. Les lexèmes sont habituellement classé en différentes catégories lexicales, comme verbes, noms, pronoms, prépositions, etc. On utilise une grammaire (aussi appelée ensemble des règles syntaxiques) pour déterminer quelle séquence de mots est une phrase bien formée (seulement de telles séquences font partie de la langue). Les phrases bien formées ont normalement un certain sens ou signification que les humains peuvent comprendre.

Exemples de phrases françaises

Analyse des phrases à trois niveaux:

Exemples de phrases françaises avec des problèmes

Vision orientée objet de l'analyse de phrases

Langages informatiques

Similairement, dans les langages informatiques, un parle d'un programme (correspondant à une phrase) qui est une séquence d'unités lexicales, et une unité lexicale (ou lexème) est une séquence de caractères.

Le traitement de langages

Un compilateur traduit un programme bien formé dans le langage source en programme objet (dans un autre langage, appelé langage cible). On veut normalement que la sémantique du programme (comme définie dans le langage source) soit le même que la sémantique du programme objet (comme définie dans le langage cible); cela veut dire que le programme objet, quand il est exécuté, réalise le sens du programme source. Des fois, on dit aussi que la sémantique du programme source est le programme objet; cela dépend de la nature du problème.

Normalement, un compilateur réalise la traduction en plusieurs étapes; correspondemment, il contient plusieurs composantes. Cela peut être représenté de différentes manières, comme par exemple par les diagrammes suivants: Version-1 , Version-2.

Comme indiqué ci-haut, la définition de ce qui est une phrase valide dans une langue, ou un programme valide, se fait à deux niveaux:

Ces règles peuvent être exprimées de différentes manières et en utilisant différents formalismes. En général, les règles syntaxiques sont plus complexes que les règles lexicales. Donc, les formalismes utilisés pour exprimer les règles syntaxique d'une langue ou d'un langage sont normalement plus puissant que les formalismes utilisés pour décrire les règles lexicales. Certains formalismes peuvent être utilisés pour décrire les deux, comme par exemple les grammaires formels (voir le chapitre 2.3 de ce cours).

En général, il y a deux problèmes à résoudre en relation avec de langages informatique (et aussi avec les langues naturelles quand elles sont traitées par ordinateur):

Certains formalismes de définition sont plus apte à résoudre le problème de génération, tandis que d'autres sont plus aptes à résoudre le problème de reconnaissance. Le compilateur, évidemment, doit résoudre le problème de reconnaissance.

Dans ce qui suit, nous allons étudier les problèmes associés à l'analyse lexicale et syntaxique des languages.


Dernière mise à jour: le 3 février,  2015