次のルールで構成された文法を使用して、文字列「1-2」を解析しようとしています。
spirit::qi::rule<Iterator, spirit::utf8_symbol_type()> op1 = "-";
spirit::qi::rule<Iterator, spirit::utf8_symbol_type()> op2 = "+";
spirit::qi::rule<Iterator, spirit::utree(), spirit::qi::space_type> numberParser = boost::spirit::qi::double_;
spirit::qi::rule<Iterator, spirit::utree(), spirit::qi::space_type> expressionParser;
expressionParser = numberParser >> -( (op1 >> expressionParser) | (op2 >> expressionParser));
start = expressionParser.alias();
ここで、startは私の文法クラスのメンバーです。
spirit::qi::rule<Iterator, spirit::utree(), spirit::qi::space_type> start;
ここでのルールを使用して、左から右への2項演算+および-ごとにノードを作成します。
次の方法を使用して文字列「1-2」を解析すると、次のようになります。
void Parse(const std::string& testString, const CDynamicExpressionSyntaxParser<const char*>& parser)
{
char const* first = testString.c_str();
char const* last = &first[testString.size()];
boost::spirit::utree tree;
bool success = boost::spirit::qi::phrase_parse(first,last,parser, boost::spirit::qi::space,tree);
std::cout << "tree: " << tree << '\n';
}
rule.hppでアクセス違反が発生しました。私は何が間違っているのですか?