На сегодня (2011-04-05, обновлено 2017-11-29) вам потребуются последние версии:
flex-2.5.4a-1.exe
bison-2.4.1-setup.exe
После этого выполните полноеустановить в каталог по вашему выбору без пробелов в имени .Я предлагаю C:\GnuWin32
. не устанавливайте его в по умолчанию (C: \ Program Files (x86) \ GnuWin32), потому что у bison есть проблемы с пробелами в именах каталогов, а не в скобках.
Также рассмотрите возможность установки Dev-CPP в каталог по умолчанию (C:\Dev-Cpp
)
После этого установите переменную PATH в значениевключите каталоги gcc
(в C:\Dev-Cpp\bin
) и flex\bison
(в C:\GnuWin32\bin
).Для этого скопируйте это: ;C:\Dev-Cpp\bin;C:\GnuWin32\bin
и добавьте его в конец переменной PATH
, определенной в месте, показанном на следующем рисунке:
Если рисунок не в хорошем разрешении,Вы можете увидеть пошагово здесь .
Откройте приглашение, перейдите в каталог, где находятся ваши ".l" и ".y",и скомпилируйте их с:
flex hello.l
bison -dy hello.y
gcc lex.yy.c y.tab.c -o hello.exe
Вы сможете запустить программу.Я сделал источники для простого теста (печально известного 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
Счастливого взлома.