由于flex往往为我们生成的是C代码(lex.yy.c),而实际上我们通常要把它们应用到C++中,特别是应用到Windows应用程序中来,在MFC工程下构造词法分析程序。
我们往往只是将产生的lex.yy.c直接添加到MFC工程就完事,但是编译时,由于各种各样的原因,而产生大量的语法错误,难以修改。本人最近在MFC下构造一个扩充TINY语言的词法分析也是遇到了一些问题,查阅了大量资料(已经将主要的参考资料放到lex学习栏目上,请看:http://www.cppblog.com/Plator/category/7159.html),耗费了我两天的时间解决这些问题。因此我想写本文,将把一些注意问题叙述如下,希望对一些朋友有所帮助。
1. 要将lex.yy.c改为CPP文件:lex.yy.cpp。因为MFC是C++工程,若不修改则会出现错误;
2. 将#include <stdio.h>改为#include <stdafx.h>,不然会出现如下错误:unexpected end of file while looking for precompiled header directive;
3. 将flex安装目录下include文件夹的unistd.h添加到MFC工程内,并修改#include <unistd.h>,为#include "unistd.h"。因为unistd.h文件中定义了词法分析需要用到一些头文件。
4. 如果lex源文件需要用input读取字符,则应该换用yyinput,因为input会与C++中的流名词重复,会出现编译错误;
5. 注意一些I/O例程的应用,具体请见:http://www.cppblog.com/Plator/archive/2008/05/24/50940.html
只是短短几个错误,但是解决的过程参考了大量资料,虽然不知道这些资料出自何人之手,但是在此感谢这些作者!