我試圖解析與升壓::精神這個簡單consise XML的頭腦結構,的boost ::精神和語法
One{
Two{
Three{
}
}
}
和代碼的組織結構如下:
的結構定義保持精神-東西:
struct config;
typedef boost::variant< boost::recursive_wrapper<config> , std::string > config_node;
struct config
{
std::string name;
std::vector<config_node> children;
};
BOOST_FUSION_ADAPT_STRUCT(
config,
(std::string, name)
(std::vector<config_node>, children)
)
宣言(無恥從XML介紹抄截) (在解析器類上)
qi::rule<Iterator, config(), qi::locals<std::string>, ascii::space_type> cfg;
qi::rule<Iterator, config_node(), ascii::space_type> node;
qi::rule<Iterator, std::string(), ascii::space_type> start_tag;
qi::rule<Iterator, void(std::string), ascii::space_type> end_tag;
在解析器'parse'方法中定義規則。
node = cfg;
start_tag = +(char_ -'{') >> '{';
end_tag = char_('}');
cfg %= start_tag[_a = _1]
>> *node
>> end_tag(_a);
_a和_1是boost :: phoenix變量。
此規則上面粘貼的小文檔片斷的作品,但如果我把它改爲:
One{
Two{
}
Three{
}
}
(兩個組在同一範圍內,而不是其他組的組內)解析器失敗。 我不知道爲什麼。
謝謝。提升是一個巨大的怪物,我仍然試圖「馴服」它。 =) – 2013-02-22 16:07:40