J'ai des fichiers Lex
et YACC
pour analyser mes fichiers (fichier .l
et fichier .y
).
Comment compiler ces fichiers et comment créer un fichier .c
équivalent dans la plate-forme Windows?
Quant à aujourd'hui (2011-04-05, mis à jour le 29/11/2017), vous aurez besoin des dernières versions de:
Après cela, effectuez une installation complète dans un répertoire de votre préférence sans espaces sous le nom. Je suggère C:\GnuWin32
. Ne pas installez-le dans par défaut (C:\Program Files (x86)\GnuWin32) car bison a des problèmes d’espace dans les noms de répertoire, pour ne pas dire de parenthèse.
Pensez également à installer Dev-CPP dans le répertoire par défaut (C:\Dev-Cpp
).
Après cela, définissez la variable PATH pour inclure les répertoires bin de gcc
(dans C:\Dev-Cpp\bin
) et flex\bison
(dans C:\GnuWin32\bin
). Pour ce faire, copiez ceci: ;C:\Dev-Cpp\bin;C:\GnuWin32\bin
et ajoutez-le à la fin de la variable PATH
, définie à l'emplacement indiqué par cette figure:
Si la résolution n’est pas bonne, vous pouvez voir un pas à pas ici .
Ouvrez une invite, accédez au répertoire où se trouvent vos ".l" et ".y" et compilez-les avec:
flex hello.l
bison -dy hello.y
gcc Lex.yy.c y.tab.c -o hello.exe
Vous pourrez exécuter le programme. J'ai créé les sources pour un test simple (le fameux Hello World
):
%{
#include "y.tab.h"
int yyerror(char *errormsg);
%}
%%
("hi"|"oi")"\n" { return HI; }
("tchau"|"bye")"\n" { return BYE; }
. { yyerror("Unknown char"); }
%%
int main(void)
{
yyparse();
return 0;
}
int yywrap(void)
{
return 0;
}
int yyerror(char *errormsg)
{
fprintf(stderr, "%s\n", errormsg);
exit(1);
}
%{
#include <stdio.h>
#include <stdlib.h>
int yylex(void);
int yyerror(const char *s);
%}
%token HI BYE
%%
program:
hi bye
;
hi:
HI { printf("Hello World\n"); }
;
bye:
BYE { printf("Bye World\n"); exit(0); }
;
Édité: en évitant "attention: définition implicite de yyerror et yylex".
Avertissement: rappelez-vous, cette réponse est très ancienne (depuis 2011!) Et si vous rencontrez des problèmes en raison de modifications des versions et des fonctionnalités, vous devrez peut-être effectuer davantage de recherches, car je ne peux pas mettre à jour cette réponse pour en refléter les nouveaux éléments. Merci et j'espère que ce sera un bon point d'entrée pour vous comme pour beaucoup d'autres.
Mises à jour: si quelque chose (de très petits changements) doit être fait, veuillez consulter le dépôt officiel à github: https://github.com/drbeco/hellex
Heureux piratage.
Ce que vous voulez (probablement) est Flex 2.5.4 (certaines personnes le "maintiennent" maintenant et produisent de nouvelles versions , mais l’OMI a fait plus pour le foutre que pour réparer les défauts réels) et byacc 1.9 (de même). (Edit 2017-11-17: Flex 2.5.4 n'est plus disponible sur Sourceforge, et le référentiel Flex github ne retourne qu'à la version 2.5.5. Mais vous pouvez apparemment toujours l'obtenir d'un serveur ftp Gnu à ftp://ftp.gnu.org/old-gnu/gnu-0.2/src/flex-2.5.4.tar.gz .)
Comme cela sera inévitablement recommandé, je préviendrai contre avec Bison. Bison a été écrit à l'origine par Robert Corbett, le même gars qui a écrit plus tard Byacc, et il déclare ouvertement qu'à l'époque, il ne savait pas ou ne comprenait pas vraiment ce qu'il faisait. Malheureusement, étant jeune et stupide, il l'a publié sous la licence GPL et maintenant, les fans de la GPL le considèrent comme la solution aux maux de la vie, même si son propre auteur dit qu'il devrait être considéré comme un produit essentiellement bêta, raisonnement des fans de GPL, la licence de byacc n’a pas assez de restrictions pour être qualifiée de "gratuite"!
Il existe des ports de flex et de bison pour Windows ici: http://gnuwin32.sourceforge.net/
flex est l'implémentation libre de Lex. bison est la mise en œuvre gratuite de yacc.
Vous pouvez trouver la dernière version Windows de flex & bison ici: http://sourceforge.net/projects/winflexbison/
Il y a toujours Cygwin .
Il convient également de noter que WinFlexBison a été packagé pour le Gestionnaire de paquets Chocolatey . Installez ça et ensuite:
choco install winflexbison
... qui contient au moment de la rédaction Bison 2.7 & Flex 2.6.3.
Il existe également winflexbison3
qui (au moment de la rédaction de cet article) utilise Bison 3.0.4 & Flex 2.6.3.
Choisissez l’installation complète de Git pour Windows (avec l’outil Unix) , et bison
et flex
viendraient avec cela dans le dossier bin
.
J'avais le même problème, il a une solution très simple.
Étapes à suivre pour exécuter le programme 'Lex':
la méthode la plus simple consiste à télécharger et installer cygwin et à télécharger les packages gcc et flex lors de l'installation . abc.l
nous écrivons
flex abc.l
gcc Lex.yy.c -o abc.exe
./abc.exe