使用无效的 GDL 配置

并非所有可能的配置都有效或允许。 例如,打印设备可能不允许将硬介质放置在任何输入托盘中,因为介质可能会卡住。 借助 GDL 语言,还可以通过定义无效参数设置的组合来定义无效配置。

*InvalidCombination 指令用于此目的。 “InvalidCombination”的值是一个列表,用于命名不能一起使用的两个或多个参数设置。 用于指定参数设置的语法采用 EBNF 表示法,如以下代码示例所示。

InvalidCombination_Directive :== "*InvalidCombination" S ":"  S ParamSettingsList  S LB
ParamSettingsList :== "LIST" S "("  S ParamSetting S ","  S ParamSetting ( S "," S ParamSetting)?  S ")"
ParamSetting :== ParameterName "." Value
ParameterName :== {Construct Tag of *Feature construct}
Value :==  {Construct Tag of *Option construct found within the *Feature construct.}
S :== [#x20#x09]*
LB :== [#x0A] | [#x0D] | ([#x0A] [#x0D]) | ([#x0D] [#x0A])

*InvalidCombination 指令必须出现在 GDL 文件的根上下文中。

例如,如果想要防止周末下雨,可以指定以下代码。

*InvalidCombination: LIST(Weather.Rain, Today.Saturday)
*InvalidCombination: LIST(Weather.Rain, Today.Sunday)

如果仅在身体健康的情况下才想要防止周末下雨,可以指定以下代码。

*InvalidCombination: LIST(Weather.Rain, Today.Saturday, Health.Well)
*InvalidCombination: LIST(Weather.Rain, Today.Sunday, Health.Well)

前面的代码示例中的 *InvalidCombination 指令指定包含特定组合 (Weather.Rain、Today.Sunday、Health.Well 或 Weather.Rain、Today.Saturday、Health.Well) 的特定组合的任何配置都违反 指令。

*InvalidCombination 指令是一种特定类型的约束。 GDL 分析程序函数确定所提供的配置是否违反了 GDL 文件中定义的任何约束,然后再继续操作。 如果检测到冲突,则会 (修改配置或解决) 以避免违反约束。 这种情况称为 解析约束。 单个 GDL 文件中可能存在涉及数十个参数的数百个约束。 约束可以形成一个复杂的交互 Web,因此更改一个参数的设置可能会导致其他参数的级联更改。

注意 必须确保默认配置不违反任何约束。 如果存在,则分析程序接口函数都不会成功。

注意 GDL 分析程序还接受 *InvalidCombination 的特殊情况,它只涉及两个参数设置。