我正在尝试创建用于解析RTF文件的语法。在某些方面,我需要在语法范围内存储一些信息。我知道,我可以使用继承的属性,但这会恶化可读性。
所以我问自己语法的实例成员变量是否可以解决我的问题,如果是的话,我应该如何在语法中使用它们?
例如,我需要跟踪字符转换的活动代码页。在我的语法结构中包含int codepage
是一种好习惯吗?
我还想要的是,调用一些函数来放置和弹出堆栈上的状态变量。我想我会将状态信息组合在一个RtfState类中,我可以根据需要进行扩展。调用语法结构的成员函数的最佳方法是什么?
答案 0 :(得分:2)
你可以。只需对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) ]