【发布时间】:2021-06-30 20:10:54
【问题描述】:
我需要解析带有参数 A 和 B 的字符串。未定义参数的顺序。 IE。字符串可以作为下一种格式出现
A="value1",B="value2"
B="value1",A="value2"
您可以在下面看到我的部分代码。但在该代码中,我只能解析 A="value1",B="value2" 变体。我可以修改此代码以一起解析第一个和第二个变体吗? 是的,我可以添加替代条件(“|”)。但是如果我需要解析新的 C 和 D 参数呢?
using Iterator = std::string::const_iterator;
qi::rule<Iterator, std::string()> quotedStringParser;
quotedStringParser %= ('"' >> +(qi::char_ - '"') >> '"');
std::string A;
std::string B;
bool isImport = false;
if (!qi::parse(begin(line), end(line),
("A=" >> quotedStringParser[px::ref(A) = qi::_1] >> ',' >> "B=" >> quotedStringParser[px::ref(B) = qi::_1]) >> qi::eoi
)) {
return false;
}
【问题讨论】:
-
我只是知道这与stackoverflow.com/questions/68174743/…有关。我没有勇气回答这个问题:请不要以复杂的方式来做。把你的顾虑分开。自上而下解析syntax*,扫描/解析后做语义验证。
-
这就是语法被设计成可扩展的方式,它使您的代码更快、更易于维护、更不容易出错(参见例如stackoverflow.com/questions/67873608/… vs. stackoverflow.com/questions/2958747/…)。哦,它可能会编译得更快。
-
总而言之,有
operator^- 我有几个答案在这个网站上展示了这种方法,但遗憾的是,搜索在找到这些方法方面非常糟糕......使用“置换”作为搜索进行更新关键字帮助:stackoverflow.com/search?q=user%3A85371+permutation+qi 也许谷歌有更好的结果。 -
你好@sehe,是的,你说得对。问题是相关的。我删除了旧问题。最后,我将所有参数解析为 std::map,并为属性附加检查编写逻辑。
标签: c++ c++11 boost-spirit boost-spirit-qi boost-phoenix