使用 Flex 时,m4 出现“错误:字符串中的文件结尾”错误

问题描述 投票:0回答:1

我有一个一直在处理的 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
语句不知何故被破坏了?

有人知道从这里去哪里吗?

flex-lexer m4
1个回答
0
投票

好吧,我发现了this,他们谈到了在flex 2.5.39之后类似的东西被破坏了,所以我下载了最新版本的win-flex-bison,使用不晚于那个版本的flex,并且它修复了问题。

© www.soinside.com 2019 - 2024. All rights reserved.