Как скомпилировать файлы LEX/YACC в Windows?
Я Lex
и YACC
файлы для разбора моих файлов (.l
файл и ).
как скомпилировать эти файлы и как сделать эквивалент .c
файл для них в платформе windows?
8 ответов
на сегодня (2011-04-05, обновлено 2017-11-29) вам понадобятся последние версии:
после этого выполните полную установку в каталоге ваших предпочтений без пробелов в имени. Я предлагаю
C:\GnuWin32
. Do не установить его в по умолчанию (C:\Program Файлы (x86)\GnuWin32) потому что у зубра проблемы с пробелами в именах каталогов, не говоря уже о скобках.кроме того, рассмотрите возможность установки Dev-CPP в папке по умолчанию (
C:\Dev-Cpp
)после этого установите переменную PATH для включения каталогов bin
gcc
(inC:\Dev-Cpp\bin
) иflex\bison
(inC:\GnuWin32\bin
). Для этого скопируйте следующее:;C:\Dev-Cpp\bin;C:\GnuWin32\bin
и добавьте его в конецPATH
переменная, определенная в месте показа этим рисунок:
Если рисунок не в хорошем разрешении, вы можете увидеть шаг за шагом.-
откройте приглашение, cd в каталог, где ваш ".l "и".y " есть, и скомпилируйте их с помощью:
flex hello.l
bison -dy hello.y
gcc lex.yy.c y.tab.c -o hello.exe
вы сможете запустить программу. Я сделал источники для простого теста (печально известный 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.
вы можете найти последнюю версию 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