Использование недопустимых конфигураций 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-файле могут существовать сотни ограничений, которые включают десятки параметров. Ограничения могут формировать сложный набор взаимодействий, чтобы изменение параметра для одного параметра могло привести к каскаду изменений в других параметрах.
Примечание Необходимо убедиться, что конфигурация по умолчанию не нарушает никаких ограничений. В этом случае ни одна из функций интерфейса средства синтаксического анализа не будет выполнена.
Примечание Средство синтаксического анализа GDL также принимает особый случай *InvalidCombination, который включает только два параметра.