我正在尝试将错误处理添加到我的一个基本解析器中。 解析器如下:
struct string_literal_id : error_handler_base, annotation_base{};
struct regex_literal_id : error_handler_base, annotation_base{};
struct bool_literal_id : error_handler_base, annotation_base{};
typedef x3::rule<string_literal_id, string_literal> string_literal_type;
typedef x3::rule<regex_literal_id, regex_literal> regex_literal_type;
typedef x3::rule<bool_literal_id, bool_literal> bool_literal_type;
const string_literal_type string_literal_p = "string_literal";
const regex_literal_type regex_literal = "regex_literal";
const bool_literal_type bool_literal = "bool_literal";
auto const string_literal_p_def = x3::lexeme['"' >> +(x3::char_ - '"') >> '"'];
auto const regex_literal_def = x3::lexeme["'" >> +(x3::char_ - "'") >> "'"];
auto const bool_literal_def = x3::bool_;
BOOST_SPIRIT_DEFINE(string_literal_p, regex_literal, bool_literal)
他们解析这些结构:
struct string_literal : x3::position_tagged {
std::string compile_out() const;
std::string value;
};
struct regex_literal : x3::position_tagged {
std::string compile_out() const;
std::string value;
};
struct bool_literal : x3::position_tagged {
std::string compile_out() const;
bool value;
};
BOOST_FUSION_ADAPT_STRUCT(
string_literal,
(std::string, value)
)
BOOST_FUSION_ADAPT_STRUCT(
regex_literal,
(std::string, value)
)
BOOST_FUSION_ADAPT_STRUCT(
bool_literal,
(bool, value)
)
我使用此基础进行error_handling和注释:annotation,error_handling。
当我尝试测试解析器并编译它们时,我收到了这些错误:
/home/lukas/ClionProjects/tests/main.cpp:33:71: Fehler: keine passende Funktion für Aufruf von »boost::spirit::x3::unused_type::get()«
auto &error_handler = x3::get<error_handler_tag>(context).get();
是德语
Error: no matching function for calling »boost::spirit::x3::unused_type::get()«
auto &error_handler = x3::get<error_handler_tag>(context).get();
我试图自己学习如何在精神x3中使用错误实现错误处理,但我找不到一种方法来使这项工作。 任何人都可以帮我理解error_handling在x3中的工作原理吗?我被困在这一点上。