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個字符存在,使得解析無故障。
感覺就像我在這裏忽略了一些明顯的東西。