我有一个有点简单的问题,不知怎么找不到答案。在分析更大的语法时,我发现解析任何大于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个字符,使其解析没有失败。
感觉好像我忽略了一些显而易见的东西。
发布于 2017-02-13 21:04:02
您应该使用有效的迭代器:
std::string value = editor->toPlainText().toStdString()
std::string::const_iterator iter = value.begin(), end = value.end();你把迭代器用在一个临时的没有存储的地方。
https://stackoverflow.com/questions/42203571
复制相似问题