Ответ 1
На сегодняшний день (2011-04-05, обновлено 2017-11-29) вам понадобятся последние версии:
-
После этого сделайте полную установку в каталоге вашего предпочтения без пробелов в названии. Я предлагаю
C:\GnuWin32
. Do не установить его по умолчанию (C:\Program Files (x86)\GnuWin32), потому что bison имеет проблемы с пробелами в именах каталогов, а не в скобках. -
Также рассмотрите возможность установки Dev-CPP в каталог по умолчанию (
C:\Dev-Cpp
) -
После этого установите переменную PATH для включения каталогов bin
gcc
(вC:\Dev-Cpp\bin
) иflex\bison
(вC:\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
):
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
Счастливый взлом.