YYSETSTATE如何知道YYFILL的标识符?

YYSETSTATE how to know the identifier of YYFILL?

说明书上写的很清楚:

YYSETSTATE (s)

[...]
The parameter to YYSETSTATE is a signed integer that uniquely identifies
the specific instance of YYFILL (n) that is about to be called.
[...]

问题是,我正在从 bison 解析器调用我的 YYSETSTATE 定义的宏。我如何在不知道 integer UI 的情况下开始状态?换句话说,如何获得我想要开始的状态的标识符。

在词法分析器上:

<MY_STATE>{NAME} {
    return FN_NAME;
}

在解析器上:

expr: { push_state( ? ) } /* what's the identifier of MY_STATE? */
    '(' FN_NAME VALUE VALUE ')' { compile_expr(, , ); }
;

我认为您不应该调用 YYSETSTATE 宏。它用作 re2c 控制反转机制的一部分,通过 -f 命令行标志启用,将扫描器变成 "push" 扫描器。这是一个方便的功能,但它与启动条件无关,很难想象您可以突破抽象直接设置状态的情况。

re2c 确实有一个类似于 flex 的开始条件的功能,它是通过 -c 命令行标志启用的。要设置当前条件,您可以使用 YYSETCONDITION,它从开始条件的枚举中获取一个值。如果您还提供 -t 命令行标志,re2c 将使用此枚举创建一个头文件,以便您可以从其他翻译单元执行 YYSETCONDITION