Win flex-bison开发环境配置

Flex-Bison是一套很好很方便的工具,但是主要基于Linux,对于我这种喜(懒)欢(于)使(学)用(习) Windows(Linux)的主,希望能够在windows环境中使用这套工具。所幸,国外的大佬们提供了Windows环境下可以使用的Flex-Bison套装:Win flex-bison。

Win-Flex-Bison的下载页面地址:

https://sourceforge.net/projects/winflexbison/postdownload
本文采用的版本是2.5.15,不过好像杀毒软件的对该套装多有误会,本人无法确定是否真有问题,读者慎选。
下载页面如图 1所示:

图 1 WinFlexBison下载页面

文本提供两种配置方式:1)针对Visual Studio的用户;2)使用CodeBlocks的用户。其他IDE的暂不提供,但是会了这样种基本就够用了吧?

一、安装Win flex-bison

将Win flex-bison的下载安装包win_flex_bison-2.5.15.zip解压缩到你喜欢的目录,如:“C:\win_flex_bison”(本文以此为例。并且注意:请在解压的路径中别带中文或带空格的目录,以免发生意外情况)。可以查看一下目录中的内容,如图 2所示。


图 2 安装好Win flex-bison的目录

二、安装完毕后添加环境变量

在系统环境变量Path中添加“C:\win_flex_bison”,以便能够直接访问win_bison.exe和win_flex.exe。添加完毕后可以通过cmd在非安装目录中测试一下,即在命令提示符下(任意目录下)键入:“win-bison.exe -V”,如果能够出现如图 3所示的bison的版本信息说明环境变量添加成功。

图 3 测试Win flex-bison

三、Visual Studio下的配置

本文使用的Visual Studio(VS)是2012版本,其他版本(不低于2010)的应该都可以。另外,文本的做法来自于网站的文章(这里我主要起搬运工的作用):
https://sourceforge.net/p/winflexbison/wiki/Visual%20Studio%20custom%20build%20rules/
下面是具体的配置过程。

1、打开Visual Studio 2012,建立Win32控制台项目。

通过菜单的“文件→新建→项目”,在弹出的对话框中选择模板下的Visual C++中的Win32控制台应用程序工程(如图 4所示),名称内填写“TestFlexBison”(你可以任意起名),点击“确定”,之后在“应用程序设置”中附加选项勾选“空项目”,如图 5所示,点击完成。


图 4 建立Win32工程

图 5 选择空项目

2、VisualStudio中配置MSBuild规则

MSBuild配置后方便在VisualStdio中使用win_flex和win_bison工具。配置的参考网址:
https://docs.microsoft.com/zh-cn/visualstudio/msbuild/msbuild?view=vs-2017
首先,右键右键点击工程在弹出的菜单中选择“生成自定义”,见图 6。

图 6 MSBuild的自定义规则的配置

在点击后会弹出相关的窗口,如图 7所示。
图 7 自定义文件选择窗口

之后在弹出的文件选择框中选择之前Win flex-bison的安装目录“C:\win_flex_bison”下的custom_build_rules子目录下的子目录win_flex_bison下的win_flex_bison_custom_build.targets文件。
图 8 选择自定义build的目标文件

选择打开,之后的是否添加搜索路径对话框中选择“是”,如图 9所示。
图 9 确定添加build文件路径

勾选新添加了build项,点击确定,如图 10所示。
图 10 勾选自定义build项文件

3、查看相关属性

完成上述工作之后,右键点击项目,在弹出的菜单中选择属性,如图 11所示。


图 11 选择项目的属性

可以发现配置属性中增加了Bison files和Flex files的配置项(注意,工程中需要有.l和.y文件,否则不显示的),如图12所示。你可以根据需要在Visual Studio中进一步进行配置(不在本文所述范围内)。


图 12 添加了Bison files和Flex files配置项

4、设置输出信息的级别

最后,在工具→选项对话框的项目和解决方案中的生成并运行中的MSBuild项目生成输出详细信息的下拉菜单中选择普通(缺省是最小),如图13所示。这样就能看到当bison(.y)或flex(.l)文件存在错误时,处理过程中给出详细的错误信息,方便你进行调试。


图 13 修改MSBuild项的输出信息级别

至此,Visual Studio2012中的配置就完成了,你可以向项目中添加你的flex文件和bison文件,配合其他工程文件去完成你自己的工作了。针对Visual Studio的配置已经完成,主要是搬运前面链接中的内容。

四、CodeBlocks下的配置

CodeBlocks下的配置如果比较了解编译过程,经常写makefile的人会感觉比较方便(我是后反劲,我从来不写makefile,所以我喜欢使用集成IDE),并且有了前面Visual Studio下的配置打底,应该没有啥问题。

1、安装CodeBlocks工具

这个没啥好说的,网上有很多搬运工,直接参考即可,但需要注意,CodeBlocks的安装目录也最好保证里面不要出现“空格”、“中文字符”,其实主要保证的是MinGW里面的g++等工具的正常使用,避免一些麻烦,毕竟是从Linux迁移到Windows中,难保有些地方水土不服。不过本人的CodeBlocks就按照在“C:\Program Files (x86)\CodeBlocks”下,貌似这里也没有出问题,也正常使用(但是VSCode里配置其他任务时存在问题)。启动CodeBlocks,界面如图 14所示。


图 14 CodeBlocks启动后的界面

2、配置Compiler

在菜单中选择“Settings->Compiler…”,进行Compiler的相关配置,弹出相关配置compiler的对话框图 15,如图所示。


图 15 compiler的配置对话框

在对话框的选项卡中(往右选),选择“Other settings”,在里面选择“Advanced options”,如图 16所示。


图 16 Other settings

点击后会弹出一个对话框,主要是怕我们随意修改compiler的编译选项,如图 17所示。由于我们就是要修改,所以选择“Yes”。
图 17 修改配置的敬告

之后,会弹出“Advanced compiler options”对话框,如图 18所示。里面有很多命令的宏,读者可以仔细阅读一下,记录一下,这样对我们的后继操作有很大帮助,这点CodeBlocks还是真挺靠谱的。说实话,通过这次配置,直接让我对CodeBlocks路转粉,一点都不夸张。在这里可以对编译器等相关工具直接进行高级的配置,我们接下来要针对.l和.y进行配置。


图 18 Advanced compiler options对话框

3、针对.l的配置

在Source ext.的下拉框中选择l,表示将针对flex文件进行配置,如图 19所示,选择后下面的Command line macro下面的编辑框中会显示利用flex命令对.l文件进行处理的命令行(命令及命令参数)。由于CodeBlocks使用的是移植自Linux的MinGW,所以其缺省的命令还是Linux下使用flex的命令。现在我们需要更新为:“win_flex -o$file_dir/$file_name.flex.cpp --wincompat $file”,其中“$file_dir/$file_name.flex.cpp”是要生成的cpp文件的目录+文件名称。你可以根据你的需要选择由flex生成的文件是什么名字。相应的在Generated files的编辑框中同样修改为“$file_dir/$file_name.flex.cpp”,和前面的生成一致,这样能够让CodeBlocks找到生成的文件进行编译处理。这样.l的配置就完成了,接下来是.y的配置。


图 19 .l的配置

4、针对.y的配置

同.l的配置类似,如图 20所示,同样在Source ext.的下拉菜单中选择y,进入.y文件的相关配置中,替换原来的配置项为:
“win_bison --output=$file_dir/$file_name.tab.cpp --defines=$file_dir/$file_name.tab.h $file”(具体可以参考win_bison的帮助,通过win_bison --help)。相应Generate files也修改为“$file_dir/$file_name.tab.cpp” 和“$file_dir/$file_name.tab.h”。之后点击OK即完成配置,这样你就可以添加你的.y和.l到你的工程中了。

图 20 .y的配置

5,特别注意:如果已经有工程了,那么在配置后请一定重启CodeBlocks之后再Bulid工程,否则CodeBlocks还会按修改配置之前的配置进行Build。

五、补充说明

之所以是配置.l的生成文件为$file_name.flex.cpp,而.y的生成文件是$file_name.tab.h和$file_name.tab.cpp,完全是因为参考了Win flex_bison这个软件包中针对Visual Studio的设置。你完全可以指定为自己想要的文件名称($file_name.scanner.cc,$file_name.parser.hh或$file_name.parser.cc等等),不过在工程中的其他文件中引用生成文件的头文件时,还请进行相应的修改。
本配置针对的是C版的flex和bison,但是集成在C++工程中使用的话(本人已经实现过较大的工程),目前没有发现啥致命的问题。由于C版的目前足够使用(听说有专门为针对C++的),故没有研究C++版的。
按理说,flex和bison应该是很常用的工具,但是这方面的资料好像比较少,特别是Windows下,有也大多都是搬运工,并且里面的细节也是比较的含糊,简直就是不想让你看清楚。难道是大家都是在Linux下使用?本文提供一份Windows下的解决方案,希望能够帮助那些想用flex和bison但又不熟(想)悉(学)Linux的人。
Linux,不学不行吗?


转载请注明出处,否则不太好哇?

END

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,265评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,078评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,852评论 0 347
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,408评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,445评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,772评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,921评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,688评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,130评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,467评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,617评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,276评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,882评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,740评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,967评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,315评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,486评论 2 348

推荐阅读更多精彩内容