我使用的是bison & flex (通过cygwin下载)和vc++。当我编译这个程序时,我得到了一个错误:
...: fatal error C1083: Cannot open include file: 'unistd.h': No such file or directory
flex生成的文件中对应的代码是:
#ifndef YY_NO_UNISTD_H
/* Special case for "unistd.h", since it is non-ANSI. We include it way
* down here because we want the user's section 1 to have been scanned first.
* The user has a chance to override it with an option.
*/
/* %if-c-only */
#include <unistd.h>
/* %endif */
/* %if-c++-only */
/* %endif */
#endif
如果我在flex文件(.l)中定义了YY_NO_UNISTD_H,这个错误就会消失,但我会得到其他几个错误:
...: error C2447: '{' : missing function header (old-style formal list?)
...: warning C4018: '<' : signed/unsigned mismatch
...: error C3861: 'isatty': identifier not found
我如何解决这个问题?
所有这些错误都发生在flex生成的扫描程序中。
我知道这是因为在windows中不存在。我必须编写自己的unistd.h吗?如果是这样,如何编写它来消除这些错误?
发布于 2010-05-14 16:41:46
词法分析器使用isatty
来确定输入流是终端还是管道/文件。词法分析器使用这些信息来改变其缓存行为(当输入不是终端时,词法分析器读取大块的输入)。如果您知道您的程序永远不会用于交互式类型,那么可以将%option never-interactive
添加到您的词法分析器中。当使用用户输入运行程序时,请使用%option interactive
。如果需要这两种用途,您可以生成一个交互式词法分析器(在批处理模式下使用时会造成性能损失),或者提供您自己的isatty
函数。
发布于 2011-10-28 22:20:27
在.l
文件中使用%option nounistd
来消除对unistd.h
的依赖。
发布于 2016-09-10 14:46:43
使用带有--wincompat选项的win_flex.exe,你不需要修改你的lex文件
https://stackoverflow.com/questions/2793413
复制相似问题