- pt_parse
- ast_parse
- 文法の変化・拡張に強い
- 構文木が(pt_parseのそれに比べて)非常にコンパクト
- ruleのidが取れないのでgrammarとの相性が悪い?(と思ったらそのためのparser_id(parser_tag)なのねん.っていうか,template引数でid指定するということはcompile時dispatchも可能?->さすがにcompile時dispatchは無理ぽだった.考えてみれば当たり前か.でも,id取れることは確認したのでgrammarとも共用でき(゜д゜)ウマーなことには変わりなし)
つくづく良く考えられて,練りこまれていることを思い知らされる・・・
参考までに,上の実験のために使ったdumperのコードを晒しておきます.
templatevoid dump_tree_node(typename TreeIterator const &ti, std::size_t indent, std::ostream &os) { typedef typename std::iterator_traits ::value_type tree_node; std::fill_n(std::ostream_iterator (os), indent, ' '); os << ti->value.id().to_long() << "->"; std::copy(ti->value.begin(), ti->value.end(), std::ostream_iterator (os)); os << std::endl; for(typename tree_node::const_tree_iterator i = ti->children.begin(); i != ti->children.end(); ++i) { dump_tree_node(i, indent + 2, os); } } template void dump_parse_tree(boost::spirit::tree_parse_info const &info, std::ostream &os = std::cout) { dump_tree_node(info.trees.begin(), 0, os); }
っていうか適当過ぎた.dumpとはいえ,もっと木らしく表示しろってか・・・