使用提升 Qi 解析为结构的随机顺序

Random order for parsing into struct using Boost Qi

本文关键字:结构 随机 顺序 Qi      更新时间:2023-10-16
Boost

提供了一个简洁的示例,介绍如何非常轻松地将数据解析为已在此处转换为 Boost Fusion 元组的结构,但我只是想知道如何调整代码以允许解析无序数据 - 即参考链接中找到的员工示例,我们希望能够正确解析employee { "surname", "firstname", age, salary }。这个例子有点不那么具体,因为age的签名可能与salary没有区别,对于surnamefirstname也是如此。

但是假设我们调整我们的解析器以具体解析形式employee { surname = "Smith", firstname = "John", age = 34, salary = 60000 }的输入,并希望能够以随机顺序输入四个属性并允许正确的解析。我该怎么做?

以下内容与您的任务相关:

  • 排列解析器 (a ^ b)

    排列运算符 a ^ b 匹配一个或多个操作数 (a, b, ...等)以任何顺序

    但是,如果您的元素不是可选的,则需要添加验证

  • 带有 kwd 指令的关键字列表运算符允许更精细的控制:

    住在科里鲁

    constraint_person_rule =
          kwd("name",1)               ['=' > parse_string ]
        / kwd("age"   ,1)             ['=' > int_]
        / kwd("size"   ,1)            ['=' > double_ > 'm']
        / kwd("favorite color",0,inf) [ '=' > parse_string ]
        ;