Using flex

由于编译原理课程设计中要求使用lex和yacc编写一个程序设计语言的编译工具,老师虽然提供了基本的lex和yacc,可是还是想自己动手。尝试了好多最后感觉UnxUtils这个Windows下的Unix工具包用起来还不错。

首先下载到UnxUtils和UnxUpdate后,将两者合二为一,并把其中/usr/local/wbin的绝对路径加入path中,然后就可以通过命令行来使用flex和bison。

使用flex把l文件转换成c文件后,将/usr/local/lib下的libfl.lib 和 libfl.a 放在为c文件所建工程的目录下,然后在VC下的菜单:工程->设置->Link标签的对象/库模块中添加libfl.lib 和libfl.a 即可.

对于bison,要把/usr/local/share/目录下的两个文件bison.hairy 和 bison.simple的路径添加到环境变量中,即在环境变量中添加如下两项:

名称
BISON_HAIRY自己的实际路径/UnxUtils/usr/local/share/biosn.hairy
BISON_SIMPLE自己的实际路径/UnxUtils/usr/local/share/biosn.simple

 

 

 

Notice:

用flex转换成的C程序在编译时会出现警告exit等函数未定义等,是由于没有引入stdlib.h这个头文件。

另外,在C程序段写的函数最好在声明段先声明一下。

下面是自己参照的一篇设置:

Using Flex in Visual Studio 6 (VC++)

 

This tutorial is for users who are already familiar with Visual Studio VC++ and flex.

  1. Create a new workspace and add your lex file (ie lexer.l)

  2. Save the following files in the same directory as your workspace: flex.exe , libfl.lib, libfl.a

  3. Go to Project/Settings/ and select your project in the explorer window at the left.

  4. Select the Link tab. In the "Object/library modules" section, append libfl.lib and libfl.a to the end of the list.

  5. If your lex file reads input from the command line, (such as a filename like inputfile.txt), then select the Debug tab and add the command line parameters to the "Program Arguments" field.

  6. Return to the left hand explorer window and expand your project. Select your lex file (ie lexer.l)

  7. Under the "General" tab, select Always use custom build step.

  8. Under the "Custom Build" tab, place flex followed by the name of your lexer file into the "Commands" box (ie flex lexer.l)
    Then place this text into the "Outputs" box:      lex.yy.c

  9. Build your project once (Control-F5). You should get the message "Cannot execute program".

  10. The previous step should create a file called lex.yy.c in your workspace directory. Add this file to your project.

  11. I suggest you add the input file (if your lex program requires one) to your project as well so that you can easily edit it, but this is not required.

  12. If you get an error that looks something like:

    lex.yy.obj : error LNK2001: unresolved external symbol _yywrap
    Debug/compiler.exe : fatal error LNK1120: 1 unresolved externals

    This means you are not linking in the library files correctly. Check step 2, 3, and 4 again.

  13. The next time you build (Control-F5), your project should run. If it doesn't, send me a message and I'll see if I can help.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值