URL: https://linuxfr.org/news/lex-yacc Title: lex & yacc Authors: Anonyme Benoît Sibaud Date: 2001年05月22日T00:36:07+02:00 Tags: livre Score: 0 Extrait: « _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 :* John Levine, Tony Mason & Doug Brown *Éditeur :* O'Reilly *ISBN :* 1-56592-000-7 *Pages* 386 *Prix :* Prix indicatif 29ドル.95 *Rédacteur :* [BugattiFan](mailto:francois.revest@wanadoo.fr) ![Couverture](https://img.chasse-aux-livres.fr/v7/_zmx1_/21A1IFe1fYL.jpg?w=300&h=300&func=bound&org_if_sml=1) 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 récupé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 désambiguïser les grammaires classiques sur les compilateur par exemple comment fait on pour que le `else` se rapporte 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 annexes 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 1. Lex et Yacc 2. Utilisation de Lex 3. Utilisation de Yacc 4. Langage de génération de menus 5. Analyseur SQL 6. Règle d'écriture des spécifications Lex 7. Règle d'écriture des grammaires Yacc 8. Gestion des ambiguïtés 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](https://www.oreilly.com/library/view/lex-yacc/9781565920002/)

AltStyle によって変換されたページ (->オリジナル) /