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

Random order for parsing into struct using Boost Qi

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

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

以下与您的任务相关:

  • Permutation Parser (a ^ b)

    The permutation operator, a ^ b, matches one or more operands (a, b, ... etc.) in any order

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

  • Keyword List Operator with the kwd directive允许更细粒度的控制:

    Live On Coliru

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