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

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

如何编译这些文件,以及如何在Windows平台上为他们制作等效的.c文件?

至于今天(2011-04-05)你将需要最新版本的:

  1. 柔性2.5.4a-的1.exe

  2. 野牛-2.4.1-SETUP.EXE

  3. 之后,请在您的首选项的目录中进行完整安装, 而名称中没有空格 。 我build议C:\GnuWin32 。 不要将它安装在默认的 (C:\ Program Files(x86)\ GnuWin32)中,因为bison在目录名称中有空格问题,而不是括号。

  4. 另外,请考虑将Dev-CPP安装在默认目录( C:\Dev-Cpp

  5. 之后,将PATHvariables设置为包含gcc (在C:\Dev-Cpp\bin )和flex\bison (在C:\GnuWin32\bin )中的C:\GnuWin32\bin 。 为此,拷贝: ;C:\Dev-Cpp\bin;C:\GnuWin32\bin ,并将其追加到PATHvariables的末尾,在此图所示的地方定义:
    一步一步在Win-7下设置PATH变量。
    如果这个数字不是很好的解决scheme,你可以在这里看到一步一步的 。

  6. 打开一个提示符,cd到你的“.l”和“.y”所在的目录,然后编译它们:

    1. flex hello.l
    2. bison -dy hello.y
    3. gcc lex.yy.c y.tab.c -o hello.exe

用于创建词法分析器,分析器和可执行文件的命令

你将能够运行该程序。 我做了一个简单的testing(臭名昭着的Hello World )的来源:

Hello.l

 %{ #include <stdlib.h> #include "y.tab.h" %} %% ("hi"|"oi")"\n" { return HI; } ("tchau"|"bye")"\n" { return BYE; } . { yyerror(); } %% int main(void) { yyparse(); return 0; } int yywrap(void) { return 0; } int yyerror(void) { printf("Error\n"); exit(1); } 

Hello.y

 %{ #include <stdio.h> %} %token HI BYE %% program: hi bye ; hi: HI { printf("Hello World\n"); } ; bye: BYE { printf("Bye World\n"); exit(0); } ; 

Flex 2.5.4(有些人现在“维护”它,生成更新的版本 ,但是IMO已经做了更多的工作来弥补任何真正的缺陷),并且1.9 (同样)。 (编辑2017年11月17日:Flex 2.5.4不再在Sourceforge上可用,Flex的github仓库只能回到2.5.5。但是,你仍然可以从一个Gnu ftp服务器获取它在ftp:// http://ftp.gnu.org/old-gnu/gnu-0.2/src/flex-2.5.4.tar.gz 。)

由于它将不可避免地被推荐,我会警告不要使用野牛。 野牛最初是由罗伯特·科贝特(Robert Corbett)写的,后者是后来写过比亚克(Byacc)的同一个人,他公开声明当时他并不真正了解或理解他在做什么。 不幸的是,他年轻而愚蠢,他在GPL下发布了它,现在GPL粉丝推动它作为生活中的弊病的答案,尽pipe它自己的作者基本上认为它应该被认为基本上是一个betatesting产品 – 但是由于错综复杂GPL粉丝的推理,byacc的执照没有足够的限制,以“免费”的资格!

这里有windows的flex和bison的端口: http : //gnuwin32.sourceforge.net/

flex是lex的免费实现。 野牛是yacc的免费执行。

Cygwin总是有的

你可以在这里find最新的flex和bison的windows版本: http : //sourceforge.net/projects/winflexbison/

去完整的安装Git的窗口(与Unix工具) ,和bisonflex会出现在bin文件夹中。

另外值得注意的是,WinFlexBison已经被包装在了Chocolatey包pipe理器中 。 安装,然后去:

 choco install winflexbison 

在编写本文时包含Bison 2.7和Flex 2.6.3。

还有winflexbison3 (写作的时候)有Bison 3.0.4和Flex 2.6.3。

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

我们写

flex abc.l

gcc lex.yy.c -o abc.exe

./abc.exe