这学期编译原理的实践作业是编写一个词法分析器和一个语法分析器,并将它们结合起来,其中提到了允许使用自动生成技术,于是编译界的大神Lex和Yacc就华丽丽登场了,不过他们是Unix上的软件,要在Windows上使用还是需要解决一些问题的。
我在网上查阅了大量的资料,其中最多提到的是使用Parser Generator,这个软件相当于移植版的Lex + Yacc,整个软件的安装包只有2M不大,但是它存在一个问题,就是我无法用它生成可以在VS2012上编译通过的代码,但是根据网络上的资料,使用该软件是可以产生能在VC6编译通过的代码的,不过配置过程稍显繁琐。
我使用了另外一种方法,并在这里介绍给大家,简单方便。
在Windows上的Lex和Yacc的移植版是flexbison,安装这两个软件就可以使用Lex和Yacc的完整功能:

1

这两个软件也非常小巧,你可以在这里下载
下载后直接依次安装,建议安装在同一个目录里,我安装到了C:\GnuWin32,这时候你就已经可以使用他们了。
用他们生成c代码的方法非常简单,把你写好的.l文件放置到C:\GnuWin32\bin之中,然后使用命令行进行如下操作就可以产生一个名为lex.yy.c的c语言文件,如下图所示:

2

这里需要注意的是,这个c语言的文件是不能在vc或vs中编译通过的,因为微软提供的编译器缺乏了一些组件,所以为了编译这个程序,我们必须安装GCC。安装GCC有多种方式,这里推荐直接安装Dev-C++,算是个比较老的软件了。这是一个使用GCC作为C语言编译器的IDE,开源免费。

3

你需要下载4.9.9.2版(网上的5.0.0.0版是后继开发的,存在一些缺陷,不要使用),我将其装在了C:\DEV-CPP,接下来你需要把flex和bison的运行库放置到DEV-CPP的库目录中。

复制C:\GnuWin32\lib文件夹中的libfl.aliby.aC:\DEV-CPP\Lib中。

随后为了方便我们使用GCC来编译文件,建议将下面这个目录添加到你的系统path中:

4

之后使用GCC命令即可编译这个c文件了:

5

产生的可执行文件可以运行,效果如下。

6
关于lex和yacc的使用及其规则文件的编写,以后有机会再向大家介绍: )

说点什么

11 评论 在 "Windows 7下配置Lex和Yacc"

  Subscribe  
最新 最旧 得票最多
提醒

DEV 5.0.0.0之后的版本到底有什么,缺陷,博主可以详细的说一下吗。。。谢谢

博主 下载链接挂了~~ 补下链接吧~

我使用贵博客提供的方法进行了配置,使用bison时提示yyerror yywrap winmain没有定义,在.l文件中重新定义之后可以编译通过,使用也无误,只是我比较想不明白的是:为什么bison里面自己的yyerror没有办法使用是我少配置了什么东西还是什么?博主可否提供一点思路?谢过。另:我编译的代码是lex与yacc书中提供的样例代码。

我们的作业是写一个完整的编译器……