boost :: spirit :: qi - 在语法结构中使用实例成员

时间:2015-05-07 12:32:33

标签: c++ grammar boost-spirit boost-spirit-qi

我正在尝试创建用于解析RTF文件的语法。在某些方面,我需要在语法范围内存储一些信息。我知道,我可以使用继承的属性,但这会恶化可读性。

所以我问自己语法的实例成员变量是否可以解决我的问题,如果是的话,我应该如何在语法中使用它们?

例如,我需要跟踪字符转换的活动代码页。在我的语法结构中包含int codepage是一种好习惯吗?

我还想要的是,调用一些函数来放置和弹出堆栈上的状态变量。我想我会将状态信息组合在一个RtfState类中,我可以根据需要进行扩展。调用语法结构的成员函数的最佳方法是什么?

1 个答案:

答案 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) ]

一般阅读:Boost Spirit: "Semantic actions are evil"?