使用无效的 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 的特殊情况,它只涉及两个参数设置。