Windows下使用Lex和Yacc多种多样,简单罗列如下:
1.Cygwin
Cygwin是Windows平台上运行的unix/linux模拟环境,由Cygnus Solutions开发。
Cygnus起初把gcc,gdb,gas等开发工具进行了改进,使他们能够生成并解释win32的目标文件。然后再把这些工具移植到windows平台上去。
移值方案有多种,一是基于win32 api对这些工具的源代码进行大幅修改。但工作量太大,他们采取了另一种方法,即开发一个共享库(cygwin.dll),把win32 api中没有的unix风格的调用(如fork,spawn,signals,select,sockets等)封装在里面,也就是说,他们基于win32 api写了一个unix系统库的模拟层。这样,只要把这些工具的源代码和这个共享库连接到一起,就可以使用unix主机上的交叉编译器来生成可以在windows平台上运行的工具集。
以这些移植到windows平台上的开发工具为基础,Cygnus又逐步把其他的工具(几乎不需要对源代码进行修改,只需要一些配置脚本)软件移植到windows上来。这样,就在windows平台模拟出一个unix环境。
Cygwin是一个功能强大的工具集,借助它不需要一台 Unix 机器也可以编译运行 Unix 程序,这可以帮助程序开发人员把应用程序从 UNIX/Linux 移植到 Windows 平台,或者在 Window 平台开发 UNIX/Linux 应用程序。Cygwin目标在于兼容性,而不是执行效率。
2.MinGW + MSYS
MinGW (Minimalist GNU for Windows) 原来是Cygwin里GNU开发工具的一个分支,实质是一些头文件和函数库的集合,该集合允许在没有第三方动态链接库的情况下使用GCC(GNU Compiler C)开发Win32程序。MinGW主要由GNU binary utilities、GCC和GDB组成。同时还包括一些重要的库:libc(C Runtime),专用于Win32环境的API接口库。MinGW开发的程序与MS Visual Studio 程序可以彼此互相通用。
MinGW允许控制台模式的程序使用微软的标准C运行库(MSVCRT.DLL),所以你既可以用GCC写控制台模式的ANSI程序,也可以用微软提供的 C 运行库。该功能是 Windows32 API 所不具备的。
Cygwin+gcc与MinGW,都是gcc在windows下的编译环境。Cygwin+gcc编译的程序,在windows执行时必须依赖cygwin.dll,MinGW则不需要。相比 Cygwin 执行效率是 MinGW 的重点。
MinGW只是开发环境,其实就是GCC在Windows下的一个实现,没有包括Linux/Unix一些其他的工具(如bash,sh等),而MSYS弥补了这一点。MinGW常于MSYS配合使用。
MSYS (Minimal GNU(POSIX)system on Windows) ,是一个小型的GNU环境,包括基本的bash,make等等,其提供了Bourne shell的类似环境。
3.使用GnuWin
下载flex与bison的Win32源码或版本
其实上面两种方法本质也是这个。推荐网址: http://gnuwin32.sourceforge.net
4.Dev-C++ 编译 由 bison flex 编译生成代码
其实是使用 Dev C++ 代替了MinGW gcc 或者 Cygwin gcc。
Dev-C++是一个C&C++开发工具,是一款自由软件,遵守GPL协议。它集合了GCC、MinGW32等众多自由软件,并且可以从devpak.org上取得最新版本的各种工具支持,而这一切工作都是来自全球的爱好者所做的工作。 Dev-C++ IDE采用Delphi开发。不过要注意的是,变量声明位置问题的会导致编译不通过,即使用前面文章的例子在Dev-C++默认设置下是不能编译通过的。解决起来也简单,手工移到函数体开始就行了。
5.使用Parser Generator
Parser Generator可以生成Windows平台下的C/C++/Java LexYacc代码。支持Borland C++ Builder和Visual C++多种编译环境。
Parser Generator的key为PGS11115,貌似不注册不能编译库
from:http://dev.firnow.com/course/3_program/c++/cppjs/200798/70287.html 有整理
参考:
lex和yacc和parser generator和vs2008
2012-2-1
2013-03-27