Я пытаюсь отлаживать повышающий :: духа грамматика, который я хочу использовать в проекте Visual Studio: Это мой фрагмент кода:Ошибки при компиляции грамматики отладки активированной
#include <boost/spirit/include/classic.hpp>
#include <boost/spirit/include/qi.hpp>
#include <boost/fusion/include/adapt_struct.hpp>
// This is pasted and copied from another header file
namespace StateMachine {
namespace Private {
struct LuaParameterData {
std::wstring name;
std::wstring type;
std::wstring unit;
std::wstring cardinality;
std::wstring value;
};
} // namespace Private
} // namespace StateMachine
BOOST_FUSION_ADAPT_STRUCT(
StateMachine::Private::LuaParameterData,
(std::wstring, name)
(std::wstring, type)
(std::wstring, unit)
(std::wstring, cardinality)
(std::wstring, value)
)
// From here original file continues
namespace StateMachine {
namespace Private {
namespace qi = boost::spirit::qi;
template<typename Iterator>
struct LuaParameterDataParser : qi::grammar<Iterator, LuaParameterData(), qi::ascii::space_type>
{
LuaParameterDataParser() : LuaParameterDataParser::base_type(start)
{
quotedString %= qi::lexeme['"' >> +(qi::ascii::char_ - '"') >> '"'];
start %=
qi::lit("\"parameter\"")
>> ':'
>> '{'
>> qi::lit("\"name\"" ) >> ':' >> quotedString >> ','
>> qi::lit("\"type\"" ) >> ':' >> quotedString >> ','
>> qi::lit("\"unit\"" ) >> ':' >> quotedString >> ','
>> qi::lit("\"cardinality\"") >> ':' >> quotedString >> ','
>> qi::lit("\"value\"" ) >> ':' >> quotedString
>> '}'
;
}
qi::rule<Iterator, std::string(), qi::ascii::space_type> quotedString;
qi::rule<Iterator, LuaParameterData(), qi::ascii::space_type> start;
};
} // namespace Private
} // namespace StateMachine
BOOST_SPIRIT_DEBUG_RULE(StateMachine::Private::LuaParameterDataParser<std::string::const_iterator>::quotedString);
Макрос BOOST_SPIRIT_DEBUG
определяется в свойствах проекта.
Когда я скомпилировать я получаю следующие ошибки в последней строке, где я использую BOOST_SPIRIT_DEBUG_RULE
:
error C3484: syntax error: expected '->' before the return type
error C2061: syntax error : identifier 'register_node'
Я не знаю, если я делаю правильные вещи. Я хочу отлаживать свою грамматику, но я видел только подсказки для правил отладки (here и here), поэтому я попытался адаптировать мой код.
Что я делаю неправильно и что мне делать, чтобы печатать отладочную информацию, когда я использую эту грамматику с phrase_parse
?
Я поставил 'BOOST_SPIRIT_DEBUG' в настройках проекта, поэтому он используется компилятором. Я попробую ваш подход. Спасибо за вашу помощь. – Jepessen
Он компилирует (спасибо), но я не получаю результат от неудачного разбора, я установил 'BOOST_SPIRIT_DEBUG' define, так что я могу сделать? может быть, мой парсер ошибается? – Jepessen
Я не вижу ничего, что объясняет это в вашем коде, как показано. Можете ли вы опубликовать SSCCE? Как бы то ни было, вы ничего не разбираете :) – sehe