2017-02-13 8 views
2

나는 다소 간단한 문제가있어서 어떻게 든 답을 찾을 수 없습니다. 더 큰 문법을 파싱하는 동안 나는 15 자보다 큰 문자열을 파싱하면 파서가 실패로 돌아 가게된다는 것을 발견했습니다. 파서는 다음과 같습니다boost-spirit을 사용하여 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 문자가 존재, 그것이 실패하지 않고 구문 분석합니다 .

필자는 여기서 명백한 것을 간과하고있는 것처럼 느낍니다.

답변

3

당신은 유효한 반복자를 사용한다 : 당신은 저장되지 않았 음을 임시로 반복자를 사용하고

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

.