No cache version.

Caching disabled. Default setting for this page:enabled (code LNG204)
If the display is too slow, you can disable the user mode to view the cached version.

Théorie des langages : Introduction à Lex (Flex) et Bison (Yacc)

Nous avons tout d'abord vu comment réaliser un microprocesseur élémentaire. Ensuite, nous lui avons fait exécuter quelques instructions simplement par l'ouverture ou la fermeture de circuits. Par après nous avons vu qu'il était possible de réaliser un langage machine, et nous avons vu un interpréteur de langage machine.

Enfin, nous avons vu une introduction aux langages de programmation, et les phases de la compilation.

Nous pouvons à présent mettre en pratique ces différentes notions, et réaliser notre propre compilateur. Pour les exemples qui vont suivre, le compilateur prendra en entrée du code LSD [Langage Simple et Didactique] pour une P-machine. La version utilisée est LSD010. Il s'agit d'un langage proche du C (bien que très simplifié), et comporte comme types scalaires des entiers et des booléens.

Lexique

L'analyse lexicale est la partie la plus facile à vérifier. Nous devons isoler les différents jetons, les symboles terminaux du code.

Comment allons-nous procéder ? Nous allons décrire dans un fichier quelles sont les suites de caractères que nous considérons comme étant des symboles terminaux. Ces suites de caractères ne sont pas toujours identiques pour un même symbole terminal, et nous avons la possibilité de définir quelles sont les expressions qui correspondent à ce symbole en utilisant les expressions rationnelles2.

Nous utiliserons Lex5 pour écrire notre spécification lexicale.

A chaque fois qu'un symbole terminal sera rencontré lors de l'analyse, nous sauverons ce dernier dans une table des symboles. Nous devrons aussi mémoriser d'autres informations, comme le type (dans le cas de notre langage simple, des entiers ou des booléens), l'endroit où se trouve cette variable en mémoire, etc.

Contents Haut

Syntaxe

Nous utiliserons Bison ou YACC [“Yet Another Compiler Compiler”6] pour construire notre arbre syntaxique abstrait.

Comme l'arbre syntaxique abstrait mérite un peu plus d'explications, une page lui est consacrée plus loin.

Syntaxe et sémantique

Pour plus d'informations sur les différences entre la syntaxe et la sémantique, vous pouvez consulter la page d'introduction aux algorithmes.

Contents Haut

Remarque : Ordre des pages et ordre des commandes

Nous verrons d'abord l'analyse lexicale avant l'analyse syntaxique. Cependant, comme nous utiliserons Lex et YACC, nous devrons veiller à introduire la commande yacc avant celle de lex.

Ordre de compilation...

Le fichier lex.yy est compilé avec la sortie de YACC. Comme nous déclarons généralement nos constantes dans le fichier YACC, nous devons traiter ce dernier avant le fichier Lex.

Code source du compilateur LSD010

Vous pouvez explorer et consulter la totalité du code source de l'exemple du compilateur LSD010 à cette adresse : https://www.gaudry.be/en/langages-lsd10-source.html

Error Infobrol

Can not display this page of the Infobrol website

Type of error (18-01)

Unknown format specifier "&"

Please try again in a few minutes…

Return to the home page




Steph