手册清楚地说:
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.
[...]
问题是,我正在从野牛解析器中调用我的YYSETSTATE定义的宏。如何在不知道integer
UI的情况下开始状态?换句话说,我如何获得我想要开始的州的标识符。
on lexer:
<MY_STATE>{NAME} {
return FN_NAME;
}
解析器:
expr: { push_state( ? ) } /* what's the identifier of MY_STATE? */
'(' FN_NAME VALUE VALUE ')' { compile_expr($2, $3, $4); }
;
答案 0 :(得分:2)
我认为你不应该调用YYSETSTATE
宏。它被用作re2c
控件反转机制的一部分,使用-f
命令行标志启用,该标志将扫描程序转换为&#34; push&#34 ;扫描器。这是一个方便的功能,但它与开始条件无关,而且很难想象你可以突破抽象直接设置状态的情况。
re2c
确实具有与flex
的启动条件类似的功能,该功能使用-c
命令行标志启用。要设置当前条件,请使用YYSETCONDITION
,它从启动条件的枚举中获取值。如果您还提供-t
命令行标记,re2c
将使用此枚举创建一个头文件,以便您可以从其他翻译单元执行YYSETCONDITION
。