"Une personne désirant écrire un compilateur ou un interpréteur utilisera sûrement les utilitaires lex et yacc (yet another compiler compiler) ou des outils en dérivant. Cet ouvrage a pour but d'expliquer l'utilisation de ces programmes. "
lex & yacc, 2nd Edition | |
Auteur | By John Levine, Tony Mason & Doug Brown |
Editeur | O'Reilly |
ISBN | 1-56592-000-7 |
Pages | 386 |
Prix | Prix indicatif $29.95 |
Rédacteur | BugattiFan |
alt="Couverture">
<!-- Ceci est a mettre comme texte de la news annoncant la revue<br/> du livre -->
Une personne désirant écrire un compilateur ou un interpréteur
utilisera sûrement les utilitaires lex et yacc
(yet another compiler compiler) ou des outils en dérivant.
Cet ouvrage a pour but d'expliquer l'utilisation de ces programmes.
<!-- Fin du texte de la news -->
Le premier chapitre est une introduction à ces utilitaires.
Il nous introduit les notions importantes pour prendre en main lex et yacc
qui sont :
- Les expressions régulières : Celles que vous utilisez sur emacs, ou bien avec rgrep.
- Les grammaires : Quelle sont les relations entre les expressions régulières et les grammaires.
Dans ce chapitre nous avons la comparaison entre un analyseur syntaxique
écrit à la main ou avec lex.
L'exemple est marquant car celui écrit à la main prend environ une page et en
utilisant lex on réduit de 50% le code, ce qui est un excellent argument.
Le chapitre 2 est consacré à l'utilisation de lex ou plutôt la boite à
outils de lex. Y est indiqué comment rentrer ces expressions régulières et trois exemples assez simple pour comprendre comment marche lex (compter le nombre de mots, analyse d'une ligne de commande, et un analyseur de coude source de C).
Pour une utilisation plus avancée de lex les auteurs nous recommandent de lire le chapitre 6.
L'utilisation de yacc( chapitre 3) : Après la description des grammaires et l'analyse par déplacement/réduction( construction de l'automate à pile).
Les auteurs nous indiquent que yacc n'est pas la panacée pour certaines grammaires. En effet, yacc ne sait pas résoudre certains problèmes,
mais les auteurs dédramatisent ces problèmes. Ils nous expliquent comment rentrer une grammaire sur yacc et associer des actions sur la grammaire pour former
par exemple la grammaire abstraite d'un langage. Puis ils attirent notre attention sur un problème important sur les grammaires : l'ambiguïté, avec l'exemple classique des expressions arithmétiques.
On résout ces problèmes soit en modifiant la grammaire soit en précisant les associativités des opérandes avec les déclarations left, right.
Puis dans ce chapitre, on nous montre comment intégrer ces utilitaires dans un Makefile.
Les exemples sont complets et n'appelent aucune critique.
Le sixième chapitre est consacré à Lex avancé. C'est une partie plus complexe que le second chapitre avec les différentes possibilités
en changeant de mode. En expliquant la bibliothèque lex , et les contextes.
Puis on nous expose les différentes bibliothèques.
Mais je regrette la duplication de certaines informations comme la grammaire des expressions rationnelles.
Après lex avancé, on a Yacc avancé.
Sur ce chapitre on nous détaille la bibliothèque yacc et comment on effectue la recupération de données et aussi la gestion d'erreur de yacc mais il y a un
chapitre qui rentre plus en détail dans les explications. Nous avons la description des Bogue des différents yacc.
Le chapitre 8 est une partie intéressante car il nous indique comment desambiguër les grammaires classiques sur les compilateur
par exemple comment fait on pour que le else se raporte au deuxième If dans l'exemple suivant :
If cond
I1
If cond
I2
Else
I4
Le dernier chapitre explique le fonctionnement d'erreurs c'est
à dire comment on précise les erreurs dans le
code et comment on saute les erreurs pour écrire un compilateur
qui détecte plusieurs erreurs.
Les Annexes A, B, C, D, E, F, G, H décrivent les principaux lex
et yacc du marché (free ou commerciaux)
Dans les Annexe I, J l'on trouve les codes source des exemples des chapitres 4,5.
En conclusion ce livre peut être intéressant pour les personnes voulant s'initier aux problèmes de langage.
Aussi l'utilisateur de lex et de yacc voulant approfondir la connaissance des ces outils.
COncernant la présentation du livre, je trouve qu'elle est bien faite avec un nombre de schémas suffisant et des exemples bien choisis.
Mais je regrette que les solutions des exercices ne soient pas dans le livre et que les exemples ne soit pas fournis sous forme de CDROM
ou de disquette.
( Il semble que les solutions sont sur le site FTP mais je n'ai pas réussi à les trouver. )
Table des matières
- Chapitre 1 : Lex et Yacc
- Chapitre 2 : Utilisation de Lex
- Chapitre 3 : Utilisation de Yacc
- Chapitre 4 : Langage de génération de menus
- Chapitre 5 : Analyseur SQL
- Chapitre 6 : Règle d'écriture des spécifications Lex
- Chapitre 7 : Règle d'écriture des grammaires Yacc
- Chapitre 8 : Gestion des ambiguïtés
- Chapitre 9 : Signalisation des erreurs et reprise
- Annexe A : AT&T Lex
- Annexe B : AT&T Yacc
- Annexe C : Berkeley Yacc
- Annexe D : Nu Bison
- Annexe E : Flet
- Annexe F : Lex et Yaccde MKS
- Annexe G : Lex et Yacc de Abraxas
- Annexe H: Lex et Yacc de POSIX
- Annexe I : Source du Compilateur
- Annexe J: Source de l'analyseur SQL
Références
le site
web consacré à ce livre.
# Nu Bison ?
Posté par Anonyme . Évalué à 0.
| Les compilateurs
| théorie. construction. génération.
| R.Wilhem , D. Maurer , Masson
Ca parle des analyses lexicales et syntaxiques mais aussi de plein d'autres choses: langages objets, logiques, fonctionnels, etc.
--
En fin de compte, quel est le mieux : Lex ou Yacc ?
[^] # Re: Nu Bison ?
Posté par Wawet76 . Évalué à 1.
C'est une blague ou une vrai question ?
--
Thomas, pas sûr sur ce coup-là...
[^] # Re: Nu Bison ?
Posté par Anonyme . Évalué à 0.
A ton avis ?
[^] # Re: Nu Bison ?
Posté par MetalX . Évalué à 1.
L'auteur de la question ayant donné le nom d'un livre sur les compilos, il s'y connait donc un minimum, donc cela ne peut etre qu'une blague.
[^] # Re: Nu Bison ?
Posté par pasBill pasGates . Évalué à 1.
Et puis bon, la reponse aidera surement ceux qui ne savent pas et qui n'ont pas (ose) pose(r) la question.
[^] # Re: Nu Bison ?
Posté par pasBill pasGates . Évalué à 1.
Yacc fait de l'analyse syntaxique(il analyse la grammaire mais pas l'orthographe).
--> 2 softs qui font 2 choses totalement differentes.
Il est impossible de comparer les 2, c'est comme comparer un caillou avec une pomme, ca n'a rien a voir.
[^] # Re: Nu Bison ?
Posté par Anonyme . Évalué à 0.
[^] # Re: Nu Bison ?
Posté par Anonyme . Évalué à -1.
[^] # Re: Nu Bison ?
Posté par Anonyme . Évalué à -1.
[^] # Re: Nu Bison ?
Posté par Anonyme . Évalué à 0.
[^] # Re: Nu Bison ?
Posté par Ramón Perez (site web personnel) . Évalué à -1.
[^] # Re: Nu Bison ?
Posté par Anonyme . Évalué à 0.
D'un point de vue théorique les langages réguliers (Lex) sont strictement inclus dans les langages
libre du contexte (Yacc - qui en realité est un sous ensemble de CFG, LALR, mais reste un sous ensemble). Cependant du coté pratique, on se rend compte que l'expressivité de lex et yacc sont identiques du à l'ajout d'extension et la manipulation des règles sémantiques. Ils permettent tous 2 de décrire des langages généraux équivalent à une machine de Turing. Alors pourquoi utiliser les 2 ? L'explication est triviale : c'est plus simple ! Ils sont adapter chacun à leur travail.
Il est aussi à remarquer que Lex et YACC sont des outils qui commencent à dater... Il y a des parseurs bcps mieux pensés (voire http://www.compilers.net(...) pour une liste). Il y a clairement des inepties dans ces outils (par exemple : on défini les tokens dans YACC alors qu'un token c'est bien ce que contruit un Lexer).
Mais c'est vrai ce sont des standards, ils sont libre (enfin pas lex et yacc mais flex et bison). Il existe pour toutes les plateformes. Ce qui fait leur atouts majeurs. Mais il ne faut pas se leurer ce ne sont surement pas les meillleurs ! Utilisez-les c'est mon conseil mais soyez critique vis a vis de leur qualité !
-- Anthony
# La bible
Posté par G. R. (site web personnel) . Évalué à 1.
Compilation : Principes, techniques et outils de Aho, Sethi et Ullman chez Addison Wesley
http://cseng.aw.com/book/toc/0,3830,0201100886,00.html(...)
Le Lex & Yacc de Levine est bien et contient de nombreuses astuces et solutions pratiques. Il manque à mon avis des explications plus générales et théoriques. L'ouvrage que j'ai cité comble largement cette lacune.
Bref, ces deux ouvrages sont complémentaires.
Il y a aussi ce lien, où j'ai trouvé des documents très intéressants :
http://citeseer.nj.nec.com/290359.htm(...)
[^] # Re: La bible
Posté par Anonyme . Évalué à 0.
Ca semble etre http://citeseer.nj.nec.com/290359.html(...) ?
[^] # Re: La bible
Posté par G. R. (site web personnel) . Évalué à 1.
Merci pour la correction.
[^] # Re: La bible
Posté par Anonyme . Évalué à 0.
# ATTENTION C'EST EN ANGLAIS !!!
Posté par Anonyme . Évalué à 1.
[^] # Re: ATTENTION C'EST EN ANGLAIS !!!
Posté par GCN (site web personnel) . Évalué à 1.
[^] # Re: ATTENTION C'EST EN ANGLAIS !!!
Posté par gle . Évalué à 1.
Le score de 0 n'a rien à voir avec la modération, petit scarabée. RTFM!
Pas Autentifié => Score=0 par défaut
Autentifié => Score=1 par défaut
Ensuite, la modération permet de changer ça entre -1 et +oo
De plus, si tu ne lis pas l'anglais, je pense que ton avenir dans l'informatique est assez gravement compromis. Que ce soit sur support papier ou électronique, les meilleures docs sont dans la langue de Shakespeare...
Enfin, j'aimerais signaler que Lex et Yacc sont avantageusement remplacés par Flex et Bison qui ont le mérite en plus de supporter des syntaxes et des grammaires de plus de 3 lignes sans exploser.
Et pour ceux que ça intéresse, un bon bouquin:
"Crafting a Compiler" : http://cseng.aw.com/catalog/title/0,3835,0+crafting+a+compiler,00.h(...)
[^] # Re: Flex & Bison
Posté par G. R. (site web personnel) . Évalué à 1.
Comme d'habitude, le gros inconvénient des outils GNU se sont les ajouts et les écarts aux standards. Toutefois, Bison à bien une option de compatibilité.
Leur avantage, par contre, est qu'ils sont libre.
[^] # Re: ATTENTION C'EST EN ANGLAIS !!!
Posté par Anonyme . Évalué à 0.
[^] # Re: ATTENTION C'EST EN ANGLAIS !!!
Posté par Philip Marlowe . Évalué à 1.
1- Je parle et lis l'anglais, ce qui n'est pas rare. Pourtant, quand j'ai le choix entre l'original en anglais et, quand elle existe, sa traduction en français, je trouve plus confortable la version française, sauf bien entendu si le traducteur est inepte.
2- La petite pique au sujet du score, c'est parce que je vois souvent des commentaires anonymes pertinents et intéressants scorés 0 des heures après qu'ils aient été postés, et parfois des âneries signées éternellement à 1... Au départ, les deux liens au bas de chaque nouvelle, j'ai aimé, je me suis dit : "Chouette ! je vais lire les commentaires les plus intéressants, parce que filtrés", et puis euh... non, ça marche pas comme ça. En l'occurence, je voulais juste indiquer à ceux que ça intéresse que le livre est en anglais. Donc, pour le coup, fallait me laisser à 0, ça aurait été plus cohérent.
Bon, ça fait beaucoup de mots pour pas grand chose. La prochaine fois j'essaierai de poster à meilleur escient.
[^] # Re: ATTENTION C'EST EN ANGLAIS !!!
Posté par Stephane Pion . Évalué à 1.
ISBN 2-84177001-X
# Honte sur lui
Posté par Pascal Terjan (site web personnel) . Évalué à 1.
Hier j'ai trouve un bug dans w3m et j'ai eu le malheur de vouloir regarder son parseur HTML: il est ecrit tout en C a la main avec des if et des case!
[^] # Re: Honte sur lui
Posté par G. R. (site web personnel) . Évalué à 1.
Et alors ? TeX aussi est écrit « à la main »
Lex et Yacc sont des outils qui simplifient la vie, mais l'on peut très bien être amené, pour des raisons de performance ou de langage complexe (ou tordu), à écrire complètement les analyseurs.
[^] # Re: Honte sur lui
Posté par Pascal Terjan (site web personnel) . Évalué à 1.
Dans le cas de w3m je n'ai pas reussi a lui trouver de raison! Surtout pour parser du HTML pour lequel il existe deja de nombreux parseurs.
[^] # Une explication possible
Posté par Anonyme . Évalué à 0.
[^] # Re: Une explication possible
Posté par Pascal Terjan (site web personnel) . Évalué à 1.
Et je veux bien un parser "custom" mais au moins le faire proprement. En fait, je pense qu'il ne savait pas ce qu'est un parser. Et je reconnais que ca a ete le cas de tout le monde. Mais bon pour gerer un truc comme le HTML, surtout en ayant acces au net, j'aurais regarde s'il n'existe pas des outils.
A part ca je trouve ce logiciel tres bien et l'utilise tous les jours donc je vais arreter de critiquer son auteur :)
[^] # Re: Une explication possible
Posté par Anonyme . Évalué à 0.
Déjà que c'est parfois le bordel pour maintenir un compilo avec une grammaire bien propre, alors avec un parser custom accroche toi ! Il doit être buggé !
[^] # Re: Une explication possible
Posté par Anonyme . Évalué à 0.
# critique de lex et yacc ...
Posté par Anonyme . Évalué à 0.
lex :
1 - Les lexer générés par lex ne sont pas des lexer à pile, la conséquence de ceci est que comme certains tokens ne peuvent pas être exprimé à l'aide d'une expression régulière (par ex : les commentaires du langage C) il faut donc se palucher à la main la reconnaissance de ces tokens avec du code C (crado beurk!)
yacc :
1 - yacc n'a pas été concus pour générer des parser réentrants.
2- Il n'y a pas de clauses multi-start.
3 - Lorsque le parser généré par yacc détecte une erreur de syntaxe, il faut écrire soit même le code chargé de libérer les ressources mémoire référencés par les éléments de la pile d'analyse.
Bien sûr aucun de ses inconvénients ne provoque de problème insoluble et on peut toujours s'en sortir, mais c'est un ensemble de chose qui fait que c'est parfois vraiement pas pratique à utiliser.
Y a t-il qlq'un ici qui a expérimenté l'utilisation d'autres générateurs de lexer/parser qui n'ont pas les inconvénients que j'ai cité ?
Pierre
[^] # Re: critique de lex et yacc ...
Posté par Anonyme . Évalué à 0.
Il existe les états qui solutionnent le problème...
> yacc
1 - Il y a moyen de faire des parseurs réentrant en redéfinissant un certain nombre de macros... Il existe des versions étendues de ces parseurs qui peuvent le faire aussi.
2 - Multi-start késako ?
3 - Les parseurs que j'ai écrit se terminait sur erreur(s) donc pas ce problème.
C'est vrai c'est pas la panacée mais c'est bien util lex&yacc ;-)
Des parseurs qui avaient l'air bien sont ceux défini par fischer et leblanc dans "Crafting a compiler with C" (SCANGEN, LLGEN, LALRGEN ftp://ftp.csc.ncsu.edu/pub/compilers/crafting_compiler/tools(...)
). Je ne les ai pas utilisés autant que lex et Yacc mais ils sont bien mieux pensés à la base. J'ai entendu dire de professionnel que JavaCC était bien... mais pas d'expérience personnelle.
-- Anthony
[^] # Re: critique de lex et yacc ...
Posté par Anonyme . Évalué à 0.
1 - Je ne te suis pas bien ??? Y aurait il qlqchose de lex qui m'aurai échappé ?
yacc
1 - c'est vrai, mais pas pour tous les yacc, en plus je trouve ça assez mal foutu.
2 - ça sert à faire de la compilation partielle, c'est à dire que ça permet d'analyser un sous ensemble du langage.
3 - à moins d'avoir uniquement des structures plates dans ta pile d'analyse, le pb se pose forcement.
On est d'accord, c'est pas la panacée ;)
Pierre
[^] # Re: critique de lex et yacc ...
Posté par Anonyme . Évalué à 0.
from manpage:
Three routines are available for manipulating stacks of
start conditions:
void yy_push_state(int new_state)
pushes the current start condition onto the top of
the start condition stack and switches to new_state
as though you had used BEGIN new_state (recall that
start condition names are also integers).
void yy_pop_state()
pops the top of the stack and switches to it via
BEGIN.
int yy_top_state()
returns the top of the stack without altering the
stack's contents.
The start condition stack grows dynamically and so has no
built-in size limitation. If memory is exhausted, program
execution aborts.
[^] # Re: critique de lex et yacc ...
Posté par Anonyme . Évalué à 0.
Subject:
Announce: YaYacc-1.0.0. is aviable
Date:
13 May 2001 01:13:39 -0400
From:
Ruslan Shevchenko <rssh@MailAndNews.com>
Organization:
Posted via Supernews, http://www.supernews.com(...)
Newsgroups:
comp.compilers
What is this?
YaYacc -- an abbreviation for Yet Another Yacc. The programm was
created as a syntactical analyzer, which is compatible with original
on algorithm analysis and perceived language with yacc. It generate
C++ code. Resulting code can be used in multithreaded applications.
YaYacc is available in source code with BSD-like license.
It can be downloaded immediatly from our website:
http://www.gradsoft.com.ua/eng/Products/YaYacc/yayacc.html(...)
Ruslan Shevchenko
GradSoft: Chief Software Architector
http://www.gradsoft.com.ua/eng/(...)
# Pourquoi parler d'un bouquin si ancien ?
Posté par Anonyme . Évalué à 0.
Il existe une autre publication sortie chez Eyrolles en 1994 (c'est vieux aussi) mais ... en francais "Realiser un compilateur" Silverio y parle de Lex et Yacc dont les versions pour TurboPascal sont fournies.
Reference : 2-212-008834-5
(pas d'accent pour compat. je m'excuse d'etre sous M$ NT)
jm.guerville@netcourrier.com
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.