【发布时间】:2012-12-10 16:12:38
【问题描述】:
我有一个解析器,它可以从输入文件中解析不同的数据类型。我已经想通了,这种精神可以在 short 和 int 之间做出决定,例如:
value %= (shortIntNode | longIntNode);
与
shortIntNode %= (qi::short_ >> !qi::double_)
[qi::_val = phoenix::bind(&CreateShortIntNode, qi::_1)];
longIntNode %= (qi::int_ >> !qi::double_)
[qi::_val = phoenix::bind(&CreateLongIntNode, qi::_1)];
我也使用这种类型的规则来检测双打(来自答案here 和here)。解析器能够在数字 > 65535 的 int 和数字
value %= (floatNode | doubleFloatNode);
与
floatNode %= (qi::float_)
[qi::_val = phoenix::bind(&CreateFloatNode, qi::_1)];
doubleFloatNode %= (qi::double_)
[qi::_val = phoenix::bind(&CreateDoubleFloatNode, qi::_1)];
您知道是否有类似选项或其他技巧可以根据数据类型范围在 float_ 和 double_ 之间做出决定吗?
非常感谢!
【问题讨论】:
标签: c++ boost boost-spirit boost-spirit-qi