web-dev-qa-db-fra.com

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

Quelle est la différence entre Flex & Lex et Yacc & Bison. J'ai fouillé Internet d'une manière extravagante et je n'ai trouvé aucune réponse solide.

Puis-je installer pur Lex et Yacc sur Ubuntu, ou je peux installer uniquement flex et bison. Je suis confus.

  • Lex ou Yacc sont-ils toujours entretenus par quelqu'un?
  • Sont-ils tous gratuits?
  • Si Lex n'est pas gratuit, pourquoi dois-je l'installer sur ma distribution Ubuntu?

    Lex --version
    Lex 2.5.35
    
113
Dumb Questioner

Il y a quelques 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.) C'est principalement dans le domaine de l'anticipation 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 étroitement compatibles, bien que Bison ait quelques astuces supplémentaires qu'il peut faire.

Vous ne trouverez probablement pas 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 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 BSD.

Lex et Yacc sont gérés par les titulaires de licence Unix SVRx - des sociétés telles que IBM (AIX), HP (HP-UX) et Sun (Solaris) ont modifié des versions de Lex et Yacc à leur commande. 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.

74
Jonathan Leffler

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

30
Jan Jungnickel

Sur la plupart (tous?) Des systèmes Linux, "Lex" est en fait un lien symbolique vers flex. Fondamentalement, ce n'est qu'un nom différent de la version gratuite.

10
ndr

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

9
Daniel C. Sobral