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 문자가 존재, 그것이 실패하지 않고 구문 분석합니다 .
필자는 여기서 명백한 것을 간과하고있는 것처럼 느낍니다.