2010-02-02 49 views
4

我有模式的一部分,我需要解析一个模型。可以说它看起来像下面这样。boost ::灵魂语法未排序模式

{ 
    type = "Standard"; 
    hostname="x.y.z"; 
    port="123"; 
} 

的属性是:

  1. 元素可以出现无序的。
  2. 作为架构一部分的所有元素都必须显示,而不能包含其他元素。
  3. 所有元素的合成属性都放入结构中。
  4. (可选)模式将来可能取决于类型字段 - 即基于类型的不同字段 - 但我现在不担心这一点。
+0

“只有所需的元素才会出现(由类型名称指定)”:“type”键的值指示了该段中其他哪些键是有效的? – 2010-02-02 09:50:23

+0

@somebody:不是在这种情况下 - 但这是一个很好的观点,我可以从任何这样的见解中受益 - 毕竟type =“erlang”可能需要比主机名和端口更多的东西。 – 2010-02-02 09:54:06

回答

4

根据Spirit论坛,以下是答案。

你可能想看看 排列解析器:

a^b^c 

这在任何序列或B或C(或 它们的组合)相匹配。

如果目标是解析成一个结构,除了测试天气所有必要部件都被初始化,该结构构件应与boost::optional<>包裹的属性存在可随后过程中容易地检测的解析后的最佳方式运行。

+0

天气是否 – Viet 2010-05-09 06:31:57