x3的新手...该代码改编自x3教程中的roman.cpp。假设我有一个如下的符号表:
struct car_models_ : x3::symbols<char, unsigned>
{
car_models_()
{
add
("sedan", 1)
("compact", 2)
("suv", 3)
;
}
} car_models;
然后解析,
char const *first = "Model: sedan";
char const *last = first + std::strlen(first);
parse(first, last, "Model: " >> car_models[action()]);
如果符号表中未列出新模型,正确的处理方法是什么?有没有办法将通配符添加为符号表中的最后一个条目,然后以某种方式将未知模型传递给操作(例如,在这种情况下为数字“ 0”)?
答案 0 :(得分:0)
没有办法在符号表本身中执行此操作。一种可能性是:
auto ext_car_models = car_models | (x3::omit[*x3::lower] >> attr(0))
然后解析:
parse(first, last, "Model: " >> ext_car_models[action()]);
暂时忽略该属性,您的符号表实际上是以下方面的语法糖:
x3::string("sedan") | "compact" | "suv"
因此,在该位置处理未知字符串将需要以相同方式进行处理。您将需要定义一个解析器,该解析器定义模型字符串的外观。可能*x3::lower