Как скомпилировать файлы LEX / YACC в Windows? - PullRequest
50 голосов
/ 28 марта 2011

У меня есть файлы Lex и YACC для анализа моих файлов (файл .l и файл .y).

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

Ответы [ 9 ]

93 голосов
/ 05 апреля 2011

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

  1. flex-2.5.4a-1.exe

  2. bison-2.4.1-setup.exe

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

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

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

  6. Откройте приглашение, перейдите в каталог, где находятся ваши ".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):

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

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

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

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

Счастливого взлома.

11 голосов
/ 28 марта 2011

То, что вы (вероятно, хотите), - это Flex 2.5.4 (некоторые люди сейчас «поддерживают» его и выпускают более новые версии , но IMO они сделали больше, чтобы облажаться, чем исправить какие-либо реальные недостатки ) и 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. Первоначально Бизон был написан Робертом Корбеттом, тем же самым парнем, который позже написал Бьяка, и он открыто заявляет, что в то время он не знал и не понимал, что делает. К сожалению, будучи молодым и глупым, он выпустил его под лицензией GPL, и теперь поклонники GPL выдвигают его как ответ на беды жизни, хотя его собственный автор в основном говорит, что его следует рассматривать как по сути продукт бета-тестирования - но замысловатый По мнению фанатов GPL, лицензия byacc не имеет достаточных ограничений, чтобы считаться «бесплатной»!

9 голосов
/ 28 марта 2011

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

flex - бесплатная реализация lex. bison - бесплатная реализация yacc.

8 голосов
/ 28 октября 2011

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

7 голосов
/ 28 марта 2011

Всегда есть Cygwin .

3 голосов
/ 31 октября 2017

Также стоит отметить, что WinFlexBison был упакован для Шоколадного менеджера пакетов . Установите это и затем перейдите:

choco install winflexbison

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

Существует также winflexbison3, который (на момент написания статьи) имеет Bison 3.0.4 и Flex 2.6.3.

3 голосов
/ 05 февраля 2015

Перейти для полной установки Git для Windows (с инструментом Unix) , а bison и flex будут поставляться с ним в папке bin.

0 голосов
/ 07 марта 2019

У меня была та же проблема, у нее очень простое решение.
Шаги для запуска программы 'Lex':

  1. Инструменты -> 'Lex File Compiler'
  2. Инструменты -> «Lex Build»
  3. Инструменты -> «Открыть CMD»
  4. Затем в командной строке введите «name_of_file.exe» пример -> «1.exe»
  5. Затем введите весь ввод, нажмите Ctrl + Z и нажмите Enter.

Пример

0 голосов
/ 14 апреля 2016

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

мы пишем

flex abc.l

gcc lex.yy.c -o abc.exe

. / abc.exe

...