Как скомпилировать файлы LEX/YACC в Windows?

Я Lex и YACC файлы для разбора моих файлов (.l файл и ).

как скомпилировать эти файлы и как сделать эквивалент .c файл для них в платформе windows?

8 ответов


на сегодня (2011-04-05, обновлено 2017-11-29) вам понадобятся последние версии:

  1. flex-2.5.4 a-1.exe

  2. bison-2.4.1-настройка.exe

  3. после этого выполните полную установку в каталоге ваших предпочтений без пробелов в имени. Я предлагаю C:\GnuWin32. Do не установить его в по умолчанию (C:\Program Файлы (x86)\GnuWin32) потому что у зубра проблемы с пробелами в именах каталогов, не говоря уже о скобках.

  4. кроме того, рассмотрите возможность установки Dev-CPP в папке по умолчанию (C:\Dev-Cpp)

  5. после этого установите переменную PATH для включения каталогов bin gcc (in C:\Dev-Cpp\bin) и flex\bison (in C:\GnuWin32\bin). Для этого скопируйте следующее:;C:\Dev-Cpp\bin;C:\GnuWin32\bin и добавьте его в конец PATH переменная, определенная в месте показа этим рисунок:
    step-by-step to set PATH variable under Win-7.
    Если рисунок не в хорошем разрешении, вы можете увидеть шаг за шагом.

  6. откройте приглашение, cd в каталог, где ваш ".l "и".y " есть, и скомпилируйте их с помощью:

    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.

вы сможете запустить программу. Я сделал источники для простого теста (печально известный Hello World):

Здравствуйте.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);
}

Здравствуйте.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); }
         ;

отредактировано: избежать "предупреждение: неявное определение yyerror и yylex".

отказ от ответственности: помните, что этот ответ очень старый (с 2011 года!) и если вы столкнетесь с проблемами из-за изменения версий и функций, вам может потребоваться больше исследований, потому что я не могу обновить этот ответ, чтобы отразить новые itens. Спасибо, и я надеюсь, что это будет хорошая точка входа для вас, как это было для многих.

обновления: если что-то (действительно небольшие изменения) необходимо сделать, пожалуйста, проверьте официальный репозиторий на github:https://github.com/drbeco/hellex

всего доброго.


то, что вы (вероятно, хотите) Flex 2.5.4 (некоторые люди теперь "поддерживают" его и производят новые версии, но ИМО они сделали больше, чтобы испортить его, чем исправить любые реальные недостатки) и byacc 1.9 (аналогично). (Edit 2017-11-17: Flex 2.5.4 больше не доступен на Sourceforge, а репозиторий Flex github возвращается только к 2.5.5. Но вы, по-видимому, все еще можете получить его с ftp-сервера Gnu на ftp://ftp.gnu.org/old-gnu/gnu-0.2/src/flex-2.5.4.tar.gz.)

поскольку это неизбежно будет рекомендовано, я предупрежу против используя зубра. Первоначально Bison был написан Робертом Корбеттом, тем же парнем, который позже написал Byacc, и он открыто заявляет, что в то время он действительно не знал и не понимал, что он делает. К сожалению, будучи молодым и глупым, он выпустил его под GPL, и теперь поклонники GPL толкают его как ответ на жизненные проблемы даже хотя его собственный автор в основном говорит, что его следует рассматривать как бета-тестовый продукт, но по запутанным рассуждениям поклонников GPL лицензия byacc не имеет достаточных ограничений, чтобы квалифицироваться как "бесплатный"!


здесь есть порты flex и bison для windows:http://gnuwin32.sourceforge.net/

гибкий график работы является свободной реализацией lex. Бизон является свободной реализацией yacc.


всегда Cygwin.


вы можете найти последнюю версию Windows flex & bison здесь:http://sourceforge.net/projects/winflexbison/


перейти на полную установку Git для windows (с инструментом Unix) и bison и flex придет с ним в .


также стоит отметить, что WinFlexBison был упакованный на Chocolatey менеджер пакетов. Установить и пройти:

choco install winflexbison

...который на момент написания содержит Bison 2.7 & Flex 2.6.3.

появилась winflexbison3 который (на момент написания) имеет Bison 3.0.4 & Flex 2.6.3.


самый простой способ-загрузить и установить cygwin и загрузите пакеты gcc и flex во время установки. Затем запустить lex-файл, например. азбука.l

пишем

flex abc.l

gcc lex.yy.c-o abc.exe

./азбука.exe