2009-03-08 11 views
85

Quelle est la différence entre Flex & Lex et Yacc & Bison. J'ai cherché sauvagement sur Internet et je n'ai pas trouvé de réponse solide. Puis-je installer purement Lex et Yacc sur Ubuntu, ou je peux seulement installer flex et bison. Je suis confus.Quelle est la différence entre Flex/Lex et Yacc/Bison?

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

    lex --version 
    lex 2.5.35 
    
+2

Il n'y a pas de version 2.5.35 de lex - vous utilisez la version 2.5.35 de Flex, elle s'identifie simplement comme 'lex' si vous l'appelez 'lex' –

Répondre

55

Il existe certaines différences entre Lex et Flex, mais vous devez abuser de Lex pour rencontrer les problèmes avec Flex. (J'ai un programme qui abuse de Lex et ne fonctionne pas sous Flex, par conséquent.) Ceci est principalement dans le domaine de la saisie d'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 ça.

Yacc et Bison sont assez compatibles, même si Bison a quelques astuces supplémentaires.

Vous ne pouvez probablement pas trouver des copies légitimes de (l'original, AT versions & T de) Lex et Yacc pour installer sur Ubuntu. Je ne dirais pas nécessairement que c'est impossible, mais je n'en suis pas conscient. Flex et Bison sont facilement disponibles et sont équivalents dans la plupart des cas. Vous pouvez également trouver divers programmes alternatifs et approximativement équivalents du monde de BSD. Lex et Yacc sont gérés par les détenteurs de licence Unix SVRx - des sociétés telles que 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 a au moins quelques extensions non standard.

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

+3

Les informations sur Yacc sont incorrectes. Berkeley a un Yacc, présent et disponible sous licence BSD sur tous les systèmes d'exploitation BSD open source. Je downvoted sur ce compte, mais si la réponse est corrigée assez rapidement, je vais supprimer la downvote. –

+1

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

+0

Dans flex vous pouvez certainement changer les tampons d'entrée sans douleur (je l'ai fait une fois pour gérer essentiellement '# include'). Mon livre O'Reilly sur lex & yacc (pas à portée de main ici, désolé) a dit que c'était seulement possible en Lex à travers des hacks dégoûtants. – vonbrand

23

Bison est la mise en œuvre GNU/extension de Yacc, Flex est le successeur de Lex. Dans les deux cas, c'est bien (et recommandé) d'utiliser bison/flex.

+1

De plus, byacc, l'implémentation de ykel de Berkeley, est largement disponible (je le vois dans ma liste de repository Debian). –

+0

flex est appelé cela parce qu'il est (était?) _much_ plus rapide que lex. Il a plusieurs extensions, et les fichiers générés ne sont pas du tout similaires (c'est-à-dire, les hacks laids ne fonctionnent pas avec flex et viceversa). – vonbrand

8

Sur la plupart des systèmes Linux, «Lex» est en fait un lien symbolique vers flex. Fondamentalement, c'est seulement un nom différent de la version gratuite.

+1

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. –

5

YACC est disponible sous licence open source à partir de Plan 9 et Open Solaris. En outre, il y a aussi Berkeley YACC, qui est compatible avec le YACC original, mais ne partage pas le code source. Berkeley YACC peut être trouvé sur l'un des systèmes d'exploitation open source BSD.

Questions connexes