如何在Windows上编译LEX / YACC文件?

问题描述 投票:50回答:9

我有LexYACC文件来解析我的文件(.l文件和.y文件)。

如何编译文件以及如何在Windows平台上为它们制作等效的qazxsw poi文件?

windows bison yacc lex flex-lexer
9个回答
94
投票

至于今天(2011-04-05,更新2017-11-29),您将需要最新版本:

  1. .c
  2. flex-2.5.4a-1.exe
  3. 之后,在您的首选项目录中进行完整安装,名称中不能有空格。我建议bison-2.4.1-setup.exe。不要将它安装在默认值(C:\ Program Files(x86)\ GnuWin32)中,因为bison存在目录名中的空格问题,而不是括号。
  4. 另外,考虑在默认目录(C:\GnuWin32)中安装Dev-CPP
  5. 之后,将PATH变量设置为包含C:\Dev-Cpp(在gcc中)和C:\Dev-Cpp\bin(在flex\bison中)的bin目录。要做到这一点,请复制:C:\GnuWin32\bin并将其附加到;C:\Dev-Cpp\bin;C:\GnuWin32\bin变量的末尾,该变量在此图所示的地点中定义: 如果数字分辨率不高,你可以看到PATH
  6. 打开提示,cd到你的“.l”和“.y”所在的目录,并用以下代码编译它们: step-by-step here flex hello.l bison -dy hello.y

您将能够运行该程序。我做了一个简单测试的来源(臭名昭着的gcc lex.yy.c y.tab.c -o hello.exe):

Hello.l

Hello World

Hello.y

%{

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

编辑:避免“警告:yyerror和yylex的隐含定义”。

免责声明:请记住,这个答案非常陈旧(自2011年起!)如果由于版本和功能的变化而遇到问题,您可能需要更多的研究,因为我无法更新此答案以反映新的itens。谢谢,我希望这对你来说是一个很好的切入点,对很多人来说也是如此。

更新:如果需要完成某些事情(确实很小的更改),请查看github上的官方存储库:%{ #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); } ;

快乐的黑客。


11
投票

你(可能想要的)是Flex 2.5.4(有些人现在“维护”它并生成https://github.com/drbeco/hellex,但IMO他们做了更多的事情来解决它而不是解决任何真正的缺点)和newer versions(同样)。 (编辑2017-11-17:Flexfor 2.5上的Flex 2.5.4不再可用,而Flex github存储库只能回到2.5.5。但你显然仍然可以从byacc 1.9的Gnu ftp服务器上获取它。)

由于它不可避免地会被推荐,我会警告不要使用Bison。 Bison最初是由Robert Corbett编写的,他后来写了Byacc的同一个人,他公开表示当时他并不真正了解或理解他在做什么。不幸的是,年轻而愚蠢,他在GPL下发布它,现在GPL粉丝把它作为生活弊病的答案,尽管它自己的作者基本上说它应该被认为是一个基本上是beta测试产品 - 但是由于错综复杂对于GPL粉丝的推理,byacc的许可证没有足够的限制来获得“免费”资格!


9
投票

这里有窗户的弯曲和野牛端口:ftp://ftp.gnu.org/old-gnu/gnu-0.2/src/flex-2.5.4.tar.gz

http://gnuwin32.sourceforge.net/是lex的免费实现。 flex是yacc的免费实现。


8
投票

你可以在这里找到最新的flex&bison windows版本:bison



3
投票

去完整安装CygwinGit for windows (with Unix tool)bison将在flex文件夹中随附。


3
投票

另外值得注意的是,WinFlexBison已成为binpackaged。安装然后去:

Chocolatey package manager

......在撰写本文时,包含Bison 2.7和Flex 2.6.3。

还有choco install winflexbison (在撰写本文时)有Bison 3.0.4和Flex 2.6.3。


0
投票

最简单的方法是在安装过程中下载并安装cygwin并下载gcc和flex包。然后运行lex文件,例如。 abc.l

我们写

flex abc.l

gcc lex.yy.c -o abc.exe

./ABC.exe


0
投票

我遇到了同样的问题,它有一个非常简单的解决方案。 执行'Lex'程序的步骤:

  1. 工具 - >'Lex文件编译器'
  2. 工具 - >'Lex Build'
  3. 工具 - >'打开CMD'
  4. 然后在命令提示符下键入'name_of_file.exe'示例 - >'1.exe'
  5. 然后输入整个输入,按Ctrl + Z并按Enter键。

winflexbison3

© www.soinside.com 2019 - 2024. All rights reserved.