我正在尝试创建用于解析RTF文件的语法。在某些时候,我需要在语法范围内存储一些信息。我知道,我可以使用继承的属性,但这会降低可读性。
因此,我问自己语法的实例成员变量是否可以解决我的问题,如果可以,我应该如何在语法中使用它们?
例如,我需要跟踪活动的代码页以进行字符转换。int codepage
在我的语法结构内部有一个好习惯吗?
我进一步想要的是,调用一些函数以将状态变量放入并弹出堆栈。我想我会将状态信息合并到RtfState类中,可以根据需要扩展该类。调用语法结构的成员函数的最佳方法是什么?
你可以。只需对以下内容使用语义操作phx::bind
:
namespace phx = boost::phoenix;
switch_cp = qi::int_ [ phx::bind(&MyGrammar::_codepage, this) = _1 ];
但是,请记住,这会破坏可重入性:如果可以嵌套相关规则,则不要使用它。
或者,调用方法如下所示:
switch_cp = qi::int_ [ phx::bind(&MyGrammar::push_codepage, this, _1) ];
reset_cp = qi::eps [ phx::bind(&MyGrammar::pop_codepage, this) ]
通识读物:提振精神:“语义行为是邪恶的”?
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句