144 votes

Quelle est la différence entre Flex/Lex et Yacc/Bison ?

Quelle est la différence entre Flex et Lex et Yacc et Bison. J'ai fait de nombreuses recherches sur Internet et je n'ai pas trouvé de réponse solide.

Puis-je installer Lex et Yacc purs sur Ubuntu, ou puis-je installer seulement flex et bison. Je suis confus.

  • Est-ce que Lex ou Yacc sont toujours entretenus par quelqu'un ?
  • Sont-ils tous gratuits ?
  • Si Lex n'est pas libre, pourquoi l'ai-je installé sur ma distribution Ubuntu ?

    lex --version
    lex 2.5.35

6 votes

Il n'y a pas de version 2.5.35 de lex -- vous exécutez flex version 2.5.35, il s'identifie simplement comme 'lex' si vous l'invoquez comme 'lex'.

100voto

Jonathan Leffler Points 299946

Il existe quelques différences entre Lex et Flex, mais il faut abuser de Lex pour rencontrer les problèmes de Flex. (J'ai un programme qui abuse de Lex et qui ne fonctionne donc pas sous Flex.) Cela concerne principalement le domaine de l'anticipation de l'entrée ; dans Lex, vous pouvez fournir votre propre code d'entrée et modifier le flux de caractères ; Flex ne vous laissera pas faire.

Yacc et Bison sont assez compatibles, bien que Bison puisse faire quelques tours supplémentaires.

Vous ne pouvez probablement pas trouver de copies légitimes de (les versions originales, AT&T de) Lex et Yacc à installer sur Ubuntu. Je ne dirais pas nécessairement que c'est impossible, mais je n'en ai pas connaissance. Flex et Bison sont facilement disponibles et sont équivalents pour la plupart des besoins. Vous pouvez également trouver divers programmes alternatifs et approximativement équivalents dans le monde BSD.

Lex et Yacc sont maintenus par les détenteurs de la licence SVRx d'Unix - des sociétés telles qu'IBM (AIX), HP (HP-UX) et Sun (Solaris) ont des versions modifiées de Lex et Yacc à leur disposition. MKS fournit également MKS Lex et MKS Yacc ; cependant, le Yacc au moins a quelques extensions non standard.

Flex et Bison sont gratuits. (AT&T) Lex et Yacc ne le sont pas.

5 votes

L'information sur Yacc est incorrecte. Berkeley a un Yacc, qui est présent et disponible sous la licence BSD sur tous les systèmes d'exploitation BSD open source. J'ai mis un downvote sur ce compte, mais si la réponse est corrigée assez rapidement, je retirerai le downvote.

3 votes

@Daniel : AFAIK, AT&T Yacc ne peut pas être obtenu de Berkeley - ce que vous obtenez de Berkeley est le Berkeley Yacc. Je vais clarifier la réponse pour refléter cela.

1 votes

Dans flex, vous pouvez certainement changer de tampon d'entrée sans douleur (je l'ai fait une fois pour gérer essentiellement #include ). Mon livre O'Reilly sur lex & yacc (que je n'ai pas sous la main ici, désolé) disait que cela n'était possible dans lex qu'à travers des bidouillages dégoûtants.

40voto

Jan Jungnickel Points 1486

Bison est l'implémentation/extension GNU de Yacc, Flex est le successeur de Lex. Dans les deux cas, il est bon (et recommandé) d'utiliser bison / flex.

1 votes

De plus, byacc, l'implémentation de Berkeley de yacc, est largement disponible (je le vois dans ma liste de dépôts Debian).

1 votes

Le flex est appelé ainsi parce qu'il est (était ?) beaucoup plus rapide que Lex. Il possède plusieurs extensions, et les fichiers générés ne se ressemblent pas du tout (c'est-à-dire que les vilains hacks dans lex ne fonctionnent pas avec flex et vice versa).

0 votes

Est, pas était. Personne n'a jamais fixé lex(1) . @vonbrand.

13voto

ndr Points 61

Sur la plupart (tous ?) des systèmes Linux, "Lex" est en fait un lien symbolique vers flex. En fait, il s'agit seulement d'un nom différent de la version libre.

1 votes

Sur mon système (Arch Linux), les deux binaires ne se comportent pas de la même manière. Probablement une fonctionnalité de compatibilité Lex.

11voto

Daniel C. Sobral Points 159554

YACC est disponible sous les licences open source de Plan 9 et d'Open Solaris. Il existe également Berkeley YACC, qui est compatible avec le YACC original, mais ne partage pas le code source. Berkeley YACC peut être trouvé sur n'importe quel système d'exploitation open source BSD.

4voto

Avani Ranade Points 31

Bison fait partie du projet GNU. Et yacc est utilisé comme un utilitaire sur Berkeley Software Distribution (BSD), bien qu'il soit compatible avec yacc, mais Lex et Yacc appartiennent au passé. Flex et Bison sont largement utilisés aujourd'hui.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X