使用boost-spirit解析超过15个字符的字符串

时间:2017-02-13 12:02:20

标签: parsing boost-spirit boost-spirit-qi

我有一个简单的问题,我在某种程度上找不到任何答案。在解析更大的语法时,我发现解析大于15个字符的任何字符串会导致解析器返回失败。解析器看起来像这样:

namespace parser {
    template <typename Iterator>
    struct p_grammar : qi::grammar<Iterator, standard::space_type> {
        p_grammar() : p_grammar::base_type(spec) {
           spec = "qwertyuiopasdfgh";
        }
        qi::rule<Iterator, standard::space_type> spec;
    };

将从另一个函数中运行:

void MainWindow::parserTest() {
    typedef parser::p_grammar<std::string::const_iterator> p_grammar;
    p_grammar grammar;
    using boost::spirit::standard::space;
    std::string::const_iterator iter = editor->toPlainText().toStdString().begin();
    std::string::const_iterator end = editor->toPlainText().toStdString().end();

    if ( phrase_parse(iter,end,grammar,space) ) {
        outputLog->append("Parsing succesfull");
    } else {
        outputLog->append("Parsing failed");
    }
}

删除“qwertyuiopasdfgh”中的最后一个字符,因此只有15个字符存在,使其解析而不失败。

感觉我在这里忽略了一些明显的东西。

1 个答案:

答案 0 :(得分:3)

您应该使用有效的迭代器:

std::string value = editor->toPlainText().toStdString()
std::string::const_iterator iter = value.begin(), end = value.end();

您正在将迭代器用于未存储的临时文件中。