FLEX和BISON搞到WINDOWS下使用

作者:陆麟
转载请征得作者同意.
2004.05.13



FLEX和BISON果然是个好东西. 对于创建自己使用的语法十分的不错. 经过一段时间来学习LEX思维后, 小试一下. 1个类似C语法的数学表达式解析代码很快就写出来了. 支持+-*/% >> << &^|. 还有优先级处理以及// /**/的注解识别. 这样的代码用C来写工程可不小.
选择工具到是个不小的问题. WINDOWS下的YACC/LEX工具可能太少. 据网上搜索了一下. 只有MKS有WINDOWS版的. CYGWIN是个好东西. 把UNIX下的一堆工具移植到了WINDOWS下. 但是这堆工具都需要CYGWIN的支持. 难道为了使用FELX/BISON要灌个几百M的CYGWIN...
原来不用. CYGWIN下的东西有很多东西需要的是CYGWIN的DLL. 比如, 如果想用FLEX. 只要有CYGWIN1.DLL和CYGINTL-2.DLL就可以了.运行一下FLEX. 果然可以生成需要的代码. 按照这个思路, 把FLEX剥离出来. 通过DEPENDENCY把BISON也剥离出来. TRY1下. TNND, BISON跑不起来. 报告无法找到/usr/share/目录下的某个什么文件. WINDOWS哪里会有这样的路径解析. 回过头去看CYGWIN如何处理: 原来CYGWIN用注册表保存WINDOWS路径与UNIX路径对应表. 使用的是下面的方法:

[HKEY_LOCAL_MACHINE\SOFTWARE\Cygnus Solutions\Cygwin\mounts v2\/]
"native"="D:\\gnu"
"flags"=dword:0000000a

这样. "/"被CYGWIN运行库解析到D:\GNU目录. 了解这点. 就可以修改注册表, 把路径解析问题搞定. 剩下的就是巴报告缺少的文件给提取出来. :D
InsPor也顺便为大家打了包, 把FLEX/BISON/GREP 3个工具给单独搞了出来. 解包到D:\GNU目录. 把cygwin.reg导入注册表就行了. 3MB都不到. 就搞定了WINDOWS下用FLEX/BISON. :)
下载请到这里.