在boost :: spirit中为解析器属性提供默认值

时间:2012-01-28 04:22:47

标签: boost-spirit-qi

我一直在将boost :: spirit实现到一个项目中,我的一个挑战是直接解析为类型的容器:

map<string, string> 

我快到了。我遇到的问题是自动分配std :: pair的键值。也就是说,我的输入字符串中的每个标记都有一个预先确定的密钥,我希望在解析标记时将其自动插入到该对中。

我认为我很接近,但也许不是......这是(截断的)语法:

        command =
            string( "select" )
            ;

        key = string( "command" ) | qi::attr( std::string("command") );

        command_pair = key >> ' ' >> command;

        start =
            command_pair >> *command_pair
            ;
    qi::rule<Iterator, std::string()> command;
    qi::rule<Iterator, std::pair<std::string, std::string>()> command_pair;
    qi::rule<Iterator,parserMap()> start;

最终结果是在命令行上输入:

select

并让解析器插入“command”作为键,就好像我输入了一样:

command select

因此,访问map [“command”]元素将返回值“select”。

问题是,我无法让qi :: attr()来完成这项工作。也就是说,如果我输入“command select”,它就有效,但不仅仅是“select”。

1 个答案:

答案 0 :(得分:0)

看起来我觉得它比需要的更难。

解决方案在于我没有引用的部分代码。我使用parse而不是phrase_parse()调用我的语法。启用自动跳空。