c – Boost中的关键字列表运算符
发布时间:2020-12-16 07:11:50 所属栏目:百科 来源:网络整理
导读:我正在尝试解析一个对象,其中属性的顺序无关紧要. 例如,解析员工 employee { surname = “doe”,firstname = “john”,age = 30 } 应该是一样的 employee { age = 30,surname = “doe”} 理想情况下,我的规则应该是这样的(不要介意缺乏正式的定义) unordered
我正在尝试解析一个对象,其中属性的顺序无关紧要.
例如,解析员工
应该是一样的
理想情况下,我的规则应该是这样的(不要介意缺乏正式的定义) unordered_rule %= lit("employee") >> "{" >> kwd("surname")["=" > quoted_string] / kwd("age")["=" > int_] / kwd("firstname")["=" > quoted_string] / kwd("age")["=" > int] >> "}"; 但首先,如何将分离逗号合并到解析规则中?对于我的C struct struct employee {std :: string firstname; … …年龄;,即使在结构转换为融合向量之后,属性的顺序是否重要或者如何知道哪个关键字对应哪个属性? 即使在阅读关键字列表运算符的文档后,这对我来说也没有真正的补充. 解决方法
融合序列仅是有序的.因此,合成属性的顺序必须与字段已经适应融合序列的顺序相匹配.
我知道没有优雅的方法来合并分隔符(我认为有人应该扩展关键字列表解析器指令…感觉自由:)). 您可以使用跳过的混合,例如(qi :: space |’,’)和qi :: lexeme []围绕相关项目(见Boost spirit skipper issues). 或者你可以使用一个先行断言的重复表达式 unordered_rule %= lit("employee") >> "{" >> (kwd("surname") >> (&lit('}') | ',')) [ "=" > quoted_string ] / kwd("age") >> (&lit('}') | ',')) [ "=" > int_ ] / kwd("firstname") >> (&lit('}') | ',')) [ "=" > int ] >> "}"; (暂不测试). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |