Como compilar arquivos LEX / YACC no Windows?

Estou tendo arquivos Lex e YACC para analisar meus arquivos (arquivo .l e arquivo .y ).

Como compilar esses arquivos e como fazer arquivo .c equivalente para eles na plataforma windows?

Quanto a hoje (2011-04-05, atualizado 2017-11-29) você vai precisar das versões mais recentes de:

  1. flex-2.5.4a-1.exe

  2. bison-2.4.1-setup.exe

  3. Depois disso, faça uma instalação completa em um diretório de sua preferência sem espaços no nome . Eu sugiro C:\GnuWin32 . Não o instale no padrão (C: \ Arquivos de Programas (x86) \ GnuWin32) porque o bison tem problemas com espaços em nomes de diretórios, para não dizer parênteses.

  4. Além disso, considere instalar o Dev-CPP no diretório padrão ( C:\Dev-Cpp )

  5. Depois disso, configure a variável PATH para include os diretórios bin do gcc (em C:\Dev-Cpp\bin ) e flex\bison (em C:\GnuWin32\bin ). Para fazer isso, copie isto ;C:\Dev-Cpp\bin;C:\GnuWin32\bin e anexe-o ao final da variável PATH , definida no local mostrado por esta figura:
    passo-a-passo para definir variável PATH em Win-7.
    Se a figura não estiver em boa resolução, você poderá ver um passo a passo aqui .

  6. Abra um prompt, cd para o diretório onde seu “. L” e “.y” são, e compile-os com:

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

Comandos para criar analisador léxico, parser e executável.

Você poderá executar o programa. Eu fiz as fonts para um teste simples (o infame Hello World ):

Olá

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

Olá

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

Editado: evitando “aviso: definição implícita de yyerror e yylex”.

Disclaimer: lembre-se, esta resposta é muito antiga (desde 2011!) E se você tiver problemas devido a mudanças de versões e resources, você pode precisar de mais pesquisas, porque eu não posso atualizar esta resposta para refletir novos itens. Obrigado e espero que este seja um bom ponto de input para você como foi para muitos.

Atualizações: se algo (mudanças realmente pequenas) precisar ser feito, confira o repository oficial no github: https://github.com/drbeco/hellex

Feliz hacking.

O que você (provavelmente quer) é o Flex 2.5.4 (algumas pessoas agora o “mantêm” e produzem versões mais recentes , mas o IMO fez mais para estragar tudo do que corrigir defeitos reais) e byacc 1.9 (da mesma forma). (Edit 2017-11-17: O Flex 2.5.4 não está mais disponível no Sourceforge, e o repository do Flex github só volta para 2.5.5. Mas aparentemente você ainda pode obtê-lo de um servidor de ftp do Gnu em ftp: // http://ftp.gnu.org/old-gnu/gnu-0.2/src/flex-2.5.4.tar.gz .)

Como isso será inevitavelmente recomendado, vou advertir contra o uso do Bison. Bison foi originalmente escrito por Robert Corbett, o mesmo cara que mais tarde escreveu Byacc, e ele afirma abertamente que na época ele realmente não sabia ou entendia o que estava fazendo. Infelizmente, sendo jovem e tolo, ele o lançou sob a GPL e agora os fãs da GPL o empurram como a resposta para os males da vida, embora seu próprio autor basicamente diga que ele deveria ser considerado um teste beta – mas raciocínio de fãs GPL, a licença byacc não tem restrições suficientes para se qualificar como “grátis”!

Existem portas de flex e bison para windows aqui: http://gnuwin32.sourceforge.net/

flex é a implementação gratuita do lex. bison é a implementação gratuita do yacc.

Sempre tem o Cygwin .

Você pode encontrar a versão mais recente do windows do flex & bison aqui: http://sourceforge.net/projects/winflexbison/

Vá para a instalação completa do Git for windows (com a ferramenta Unix) , e o bison e o flex virão com ele na pasta bin .

Também vale a pena notar que o WinFlexBison foi empacotado para o gerenciador de pacotes Chocolatey . Instale isso e então vá:

 choco install winflexbison 

… que no momento em que escrevo contém Bison 2.7 & Flex 2.6.3.

Há também o winflexbison3 que (no momento da escrita) tem o Bison 3.0.4 & Flex 2.6.3.

O método mais fácil é baixar e instalar o cygwin e baixar os pacotes gcc e flex durante a instalação. Então, para executar um arquivo lex por exemplo. abc.l

nós escrevemos

flex abc.l

gcc lex.yy.c -o abc.exe

./abc.exe

    Intereting Posts