Sto avendo Lex
e YACC
files per analizzare i miei file (.l
file e .y
file).
Come compilare questi file e come creare file .c
equivalenti per loro nella piattaforma Windows?
Per quanto riguarda oggi (2011-04-05, aggiornato al 2017-11-29) avrete bisogno delle ultime versioni di:
Successivamente, eseguire un'installazione completa in una directory di preferenza senza spazi nel nome. Suggerisco C:\GnuWin32
. Do not installalo nel default (C:\Program Files (x86)\GnuWin32) perché bison ha problemi con gli spazi nei nomi delle directory, per non dire parentesi.
Inoltre, considera l'installazione di Dev-CPP nella directory predefinita (C:\Dev-Cpp
)
Successivamente, imposta la variabile PATH per includere le directory bin di gcc
(in C:\Dev-Cpp\bin
) e flex\bison
(in C:\GnuWin32\bin
). Per fare ciò, copia questo: ;C:\Dev-Cpp\bin;C:\GnuWin32\bin
e aggiungilo alla fine della variabile PATH
, definita nello show posto da questa figura:
Se la figura non è in buona risoluzione, puoi vedere un passo dopo passo qui .
Apri un prompt, fai un cd nella directory in cui si trovano ".l" e ".y" e compilarli con:
flex hello.l
bison -dy hello.y
gcc Lex.yy.c y.tab.c -o hello.exe
Sarai in grado di eseguire il programma. Ho creato le fonti per un semplice test (il famigerato 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); }
;
Modificato: evitando "avviso: definizione implicita di yyerror e yylex".
Dichiarazione di non responsabilità: ricorda che questa risposta è molto vecchia (dal 2011!) E se ti imbatti in problemi dovuti a versioni e funzionalità che cambiano, potresti aver bisogno di ulteriori ricerche, perché non posso aggiornare questa risposta per riflettere nuove itens. Grazie e spero che questo sia un buon punto di partenza per te come lo era per molti.
Aggiornamenti: se qualcosa (modifiche davvero piccole) deve essere fatto, si prega di consultare il repository ufficiale su github: https://github.com/drbeco/hellex
Felice hacking.
Quello che vuoi (probabilmente vuoi) è Flex 2.5.4 (alcune persone lo stanno ora "mantenendo" e producendo le versioni più recenti , ma IMO hanno fatto di più per rovinare tutto che correggere eventuali carenze reali) e byacc 1.9 (allo stesso modo). (Modifica 2017-11-17: Flex 2.5.4 non è più disponibile su Sourceforge e il repository github di Flex risale solo al 2.5.5, ma apparentemente lo si può ancora ottenere da un server ftp Gnu in ftp://ftp.gnu.org/old-gnu/gnu-0.2/src/flex-2.5.4.tar.gz .)
Dato che sarà inevitabilmente raccomandato, avvertirò against usando Bison. Bison è stato originariamente scritto da Robert Corbett, lo stesso tizio che in seguito ha scritto Byacc, e afferma apertamente che all'epoca non sapeva o capiva veramente cosa stesse facendo. Sfortunatamente, essendo giovane e sciocco, l'ha rilasciato sotto GPL e ora i fan della GPL Lo spacciano come la risposta ai mali della vita anche se il suo autore dice che dovrebbe essere pensato essenzialmente come un prodotto beta-test, ma dal contorto il ragionamento dei fan di GPL, la licenza di byacc non ha restrizioni sufficienti per qualificarsi come "gratis"!
Qui ci sono le porte di flex e bison per windows: http://gnuwin32.sourceforge.net/
flex è l'implementazione gratuita di Lex. bison è l'implementazione gratuita di yacc.
Qui puoi trovare l'ultima versione di Windows di flex & bison: http://sourceforge.net/projects/winflexbison/
C'è sempre Cygwin .
Vale anche la pena notare che WinFlexBison è stato packaged per il gestore pacchetti Chocolatey . Installalo e poi vai:
choco install winflexbison
... che al momento della scrittura contiene Bison 2.7 e Flex 2.6.3.
C'è anche winflexbison3
che (al momento della scrittura) ha Bison 3.0.4 e Flex 2.6.3.
Vai per l'installazione completa di Git per windows (con lo strumento Unix) , e bison
e flex
verrebbero inclusi nella cartella bin
.
Stavo avendo lo stesso problema, ha una soluzione molto semplice.
Passi per l'esecuzione del programma "Lex":
il metodo più semplice è scaricare e installare cygwin e scaricare pacchetti gcc e flex durante l'installazione . Quindi, per eseguire un file Lex per es. abc.l
scriviamo
flex abc.l
gcc Lex.yy.c -o abc.exe
./abc.exe