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

Parsing string with more then 15 characters with boost-spirit

我有一个有点简单的问题,但我不知何故找不到任何答案。在解析更大的语法时,我发现解析任何大于 15 个字符的字符串都会导致解析器 return 失败。解析器如下所示:

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 个字符,使其解析无误。

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

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

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

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