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文字が存在している、それが失敗せずに解析します。
ここで明白な何かを見落としているように感じる。