risposta-alla-domanda-sullo-sviluppo-web-bd.com

Come compilare i file Lex/YACC su Windows?

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?

49

Per quanto riguarda oggi (2011-04-05, aggiornato al 2017-11-29) avrete bisogno delle ultime versioni di:

  1. flex-2.5.4a-1.exe

  2. bison-2.4.1-setup.exe

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

  4. Inoltre, considera l'installazione di Dev-CPP nella directory predefinita (C:\Dev-Cpp)

  5. 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:
    step-by-step to set PATH variable under Win-7.
    Se la figura non è in buona risoluzione, puoi vedere un passo dopo passo qui .

  6. Apri un prompt, fai un cd nella directory in cui si trovano ".l" e ".y" e compilarli con:

    1. flex hello.l
    2. bison -dy hello.y
    3. gcc Lex.yy.c y.tab.c -o hello.exe

Commands to create lexical analyzer, parser and executable.

Sarai in grado di eseguire il programma. Ho creato le fonti per un semplice test (il famigerato Hello World):

Hello.l

%{

#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);
}

Hello.y

%{

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

91
Dr Beco

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"!

11
Jerry Coffin

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.

9
lesmana

Qui puoi trovare l'ultima versione di Windows di flex & bison: http://sourceforge.net/projects/winflexbison/

8
Lexxmark

C'è sempre Cygwin .

7
Skurmedel

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.

3
Alastair Maw

Vai per l'installazione completa di Git per windows (con lo strumento Unix) , e bison e flex verrebbero inclusi nella cartella bin.

3
Archy Wilhes

Stavo avendo lo stesso problema, ha una soluzione molto semplice.
Passi per l'esecuzione del programma "Lex":

  1. Strumenti -> 'Lex File Compiler'
  2. Strumenti -> 'Build Lex'
  3. Strumenti -> 'Apri CMD'
  4. Quindi nel comando Prompt digitare 'nome_di_file.exe' esempio -> '1.exe'
  5. Quindi, inserendo l'intero input, premi Ctrl + Z e premi Invio.

Esempio

0
Amit

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

0
aayush shah