Je suis en train d'avoir Lex
y YACC
pour analyser mes fichiers ( .l
et .y
).
Comment compiler ces fichiers et comment en faire des équivalents ? .c
pour eux dans la plateforme Windows ?
Je suis en train d'avoir Lex
y YACC
pour analyser mes fichiers ( .l
et .y
).
Comment compiler ces fichiers et comment en faire des équivalents ? .c
pour eux dans la plateforme Windows ?
À ce jour (2011-04-05, mis à jour 2017-11-29), vous aurez besoin des dernières versions de :
Après cela, faites une installation complète dans un répertoire de votre choix. sans espaces dans le nom . Je suggère C:\GnuWin32
. Faites no l'installer dans le par défaut ( C:\Program Fichiers (x86) \GnuWin32 ) car bison a des problèmes avec les espaces dans les noms de répertoire, sans parler des parenthèses.
En outre, envisagez d'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
(en C:\Dev-Cpp\bin
) y flex\bison
(en C:\GnuWin32\bin
). Pour ce faire, copiez ceci : ;C:\Dev-Cpp\bin;C:\GnuWin32\bin
et l'ajouter à la fin de l'élément PATH
variable, définie à l'endroit indiqué par cette figure :
Si la figure n'est pas en bonne résolution, vous pouvez voir un étape par étape ici .
Ouvrez une invite, allez dans le 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 serez en mesure d'exécuter le programme. J'ai fait les sources pour un test simple (l'infâme 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); }
;
Modifié : éviter "warning : implicit definition of yyerror and yylex".
Avertissement : rappelez-vous, cette réponse est très ancienne (depuis 2011 !) et si vous rencontrez des problèmes en raison de l'évolution des versions et des fonctionnalités, vous aurez peut-être besoin de plus de recherche, car je ne peux pas mettre à jour cette réponse pour refléter les nouvelles itens. Merci et j'espère que ce sera un bon point d'entrée pour vous comme il l'a été pour beaucoup.
Mises à jour : si quelque chose (vraiment de petits changements) doit être fait, veuillez consulter le dépôt officiel sur github : https://github.com/drbeco/hellex
Bon piratage.
bison -dy hello.y
ne produit aucun fichier. Il affiche juste quelques codes dans l'invite. Comment puis-je créer le fichier y.tab.c
?
@Pramodh C'est étrange... Quels sont les codes qu'il affiche ? Des codes d'erreur ? Ou un code source ?
J'ai effectué cette procédure dans 2 machines différentes maintenant, et les deux fonctionnent. Êtes-vous sûr d'avoir bien suivi toutes les étapes de la procédure ? Dans la capture d'écran de l'invite de commande ci-dessus, avez-vous obtenu le même écran pour flex (pas d'erreurs) ? Lorsque vous appuyez sur <enter>
après avoir tapé la touche bison -dy hello.y
commande, ce qui exactly
que vous avez ? Si vous donnez des détails exacts, nous pourrons peut-être comprendre le problème. Si vous pensez que c'est trop pour un commentaire vous pourriez peut-être poser une question avec l'erreur.
Ce que vous voulez (probablement), c'est Flex 2.5.4 (certaines personnes le "maintiennent" maintenant et produisent nouvelles versions mais, à mon avis, ils ont davantage contribué à le gâcher qu'à corriger ses véritables défauts. byacc 1.9 (de même). (Edit 2017-11-17 : Flex 2.5.4 n'est plus disponible sur Sourceforge, et le dépôt Flex github ne remonte qu'à 2.5.5. Mais vous pouvez apparemment encore l'obtenir à partir d'un serveur ftp Gnu à l'adresse suivante . ftp://ftp.gnu.org/old-gnu/gnu-0.2/src/flex-2.5.4.tar.gz .)
Puisqu'il sera inévitablement recommandé, je préviens contre en utilisant Bison. Bison a été écrit à l'origine par Robert Corbett, le même type qui a ensuite écrit Byacc, et il déclare ouvertement qu'à l'époque il ne savait pas vraiment ou ne comprenait pas ce qu'il faisait. Malheureusement, étant jeune et stupide, il l'a publié sous la GPL et maintenant les fans de la GPL le présentent comme la réponse aux maux de la vie, même si son propre auteur dit essentiellement qu'il devrait être considéré comme un produit de test bêta -- mais selon le raisonnement alambiqué des fans de la GPL, la licence de Byacc n'a pas assez de restrictions pour être qualifiée de "libre" !
Il y a des ports de flex et bison pour Windows ici : http://gnuwin32.sourceforge.net/
flex est l'implémentation libre de lex. bison est l'implémentation libre de yacc.
Vous pouvez trouver la dernière version Windows de flex & bison ici : http://sourceforge.net/projects/winflexbison/
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.