我有一个一直在处理的 Flex 输入文件,我刚刚将其更改为使用
%option extra-type
,但是我们曾经使用的 Flex 版本 2.5.27 不支持它。 (即使使用旧版本的 Flex 工作的文件版本,我也会遇到以下类型的错误)
所以我尝试使用较新的版本(具体来说,https://github.com/lexxmark/winflexbison的2.5.22和2.5.25),但我收到了类似
win_flex.exe:extern_stdin:1978: ERROR: end of file in string
的错误
我什至尝试通过 WSL 安装 ubuntu,在其上安装 flex (2.6.4),但出现如下错误
/usr/bin/m4:stdin:1969: ERROR: end of file in string
/usr/bin/m4:stdin:1964: ERROR: end of file in string
回到Windows,我注意到flex留下了一些临时文件,其中一个包含以下内容:
m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
[[
#define YY_RULE_SETUP \
YY_USER_ACTION
]])
m4_ifdef( [[M4_YY_IN_HEADER]],,[[m4_dnl
/** The main scanner function which does all the work.
*/
YY_DECL
{
yy_state_type yy_current_state;
char *yy_cp, *yy_bp;
int yy_act;
M4_YY_DECL_GUTS_VAR();
m4_ifdef( [[M4_YY_NOT_REENTRANT]],
[[
m4_ifdef( [[M4_YY_BISON_LVAL]],
[[
YYSTYPE * yylval;
]])
m4_ifdef( [[<M4_YY_BISON_LLOC>]],
[[
YYLTYPE * yylloc;
]])
]])
m4_ifdef( [[M4_YY_IN_HEADER]],,[[m4_dnl
线是1978号线。
我不熟悉 m4,但看看文件的其余部分,似乎
m4_ifdef
语句不知何故被破坏了?
有人知道从这里去哪里吗?
好吧,我发现了this,他们谈到了在flex 2.5.39之后类似的东西被破坏了,所以我下载了最新版本的win-flex-bison,使用不晚于那个版本的flex,并且它修复了问题。