unistd.h related difficulty when compiling bison & flex program under vc++

bison, cygwin, flex-lexer, visual-c++

Solution

`isatty` is used by the lexer to determine if the input stream is a terminal or a pipe/file. The lexer uses this information to change its caching behavior (the lexer reads large chunks of the input when it is not a terminal). If you know that your program will never be used in an interactive kind, you can add `%option never-interactive` to you lexer. When the program is run with user input, use `%option interactive`. When both uses are desired, you can either generate an interactive lexer, which gives a performance loss when used in batch mode, or provide your own `isatty` function.

Problem

I'm using bison & flex (downloaded via cygwin) with vc++. When I compile the program I got an error: ``` ...: fatal error C1083: Cannot open include file: 'unistd.h': No such file or directory ``` The corresponding code in the flex-generated file is: ``` #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 ``` If I define YY_NO_UNISTD_H in the flex file(.l) this error will disappear, but I get several other errors: ``` ...: error C2447: '{' : missing function header (old-style formal list?) ...: warning C4018: '<' : signed/unsigned mismatch ...: error C3861: 'isatty': identifier not found ``` How can I fix this problem? All these errors occur in the flex-generated scanner. I know it's because unistd.h doesn't exist in windows. Do I have to write my own unistd.h? If so how to write it in order to eliminate those errors?

Original source

Related problems