【发布时间】:2014-04-29 15:39:54
【问题描述】:
我有以下 boost::spirit::qi 解析器规则:
namespace qi = boost::spirit::qi;
qi::rule<Iterator, BroadbandCurve(), Skipper> Cmd_BBNSET;
Cmd_BBNSET = +(qi::float_ >> qi::float_) >> qi::int_ >> qi::int_ >> lit("BBNSET");
我试图让它发出以下属性:
struct FreqLevelPair
{
float freq;
float dbLevel;
};
BOOST_FUSION_ADAPT_STRUCT(
FreqLevelPair,
(float, freq)
(float, dbLevel)
)
struct BroadbandCurve
{
std::vector<FreqLevelPair> freqPairs;
int numFreqPairs; //Ignored since we can just count the number of pairs outright...
int curveNum; //ID number
};
BOOST_FUSION_ADAPT_STRUCT(
BroadbandCurve,
(std::vector<FreqLevelPair>, freqPairs)
(int, numFreqPairs)
(int, curveNum)
)
如您所见,我试图解析一对或多对浮点数,然后是两个整数,然后是文字“BBNSET”。 所有这些代码都可以编译,但是当我尝试解析以下形式的有效 BBNSET 命令时:
0.0 80.0 50.0 25.0 100.0 10.0 3 0 BBNSET
解析失败。我无法确定原因。我尝试将浮点对包装在词位指令中,并将 + 更改为 *,但无论我尝试什么,该命令仍然无法解析,尽管编译没有问题。
我做错了什么,一旦正确解析,这条规则会按预期发出属性吗?
【问题讨论】:
-
下次请让您的样品成为 SSCCE(如in my answer...)。另见my comment here
标签: c++ parsing boost boost-spirit boost-spirit-qi