使用 Boost Qi 解析为结构的随机顺序
Random order for parsing into struct using Boost Qi
Boost 提供了一个简洁的示例,说明如何非常轻松地将数据解析为已转换为 Boost Fusion 元组的结构 here,但我只是想知道如何调整代码以允许解析无序数据——即参考 link 中的员工示例,我们希望能够正确解析 employee { "surname", "firstname", age, salary }
。这个例子有点不那么具体,因为 age
的签名可能与 salary
无法区分,surname
和 firstname
也是如此。
但是假设我们调整我们的解析器以具体解析形式 employee { surname = "Smith", firstname = "John", age = 34, salary = 60000 }
的输入,并希望能够以随机顺序输入四个属性并允许正确解析。我该怎么做?
以下与您的任务相关:
-
The permutation operator, a ^ b, matches one or more operands (a, b, ... etc.) in any order
但是,如果您的元素不是可选的,则需要添加验证
Keyword List Operator with the kwd
directive允许更细粒度的控制:
constraint_person_rule =
kwd("name",1) ['=' > parse_string ]
/ kwd("age" ,1) ['=' > int_]
/ kwd("size" ,1) ['=' > double_ > 'm']
/ kwd("favorite color",0,inf) [ '=' > parse_string ]
;
Boost 提供了一个简洁的示例,说明如何非常轻松地将数据解析为已转换为 Boost Fusion 元组的结构 here,但我只是想知道如何调整代码以允许解析无序数据——即参考 link 中的员工示例,我们希望能够正确解析 employee { "surname", "firstname", age, salary }
。这个例子有点不那么具体,因为 age
的签名可能与 salary
无法区分,surname
和 firstname
也是如此。
但是假设我们调整我们的解析器以具体解析形式 employee { surname = "Smith", firstname = "John", age = 34, salary = 60000 }
的输入,并希望能够以随机顺序输入四个属性并允许正确解析。我该怎么做?
以下与您的任务相关:
-
The permutation operator, a ^ b, matches one or more operands (a, b, ... etc.) in any order
但是,如果您的元素不是可选的,则需要添加验证
Keyword List Operator with the
kwd
directive允许更细粒度的控制:constraint_person_rule = kwd("name",1) ['=' > parse_string ] / kwd("age" ,1) ['=' > int_] / kwd("size" ,1) ['=' > double_ > 'm'] / kwd("favorite color",0,inf) [ '=' > parse_string ] ;