Usando configurações de GDL inválidas
Nem todas as configurações possíveis são válidas ou permitidas. Por exemplo, um dispositivo de impressão pode não permitir que uma mídia rígida seja colocada em nenhuma bandeja de entrada porque a mídia pode emperrar. A linguagem GDL permite que você também defina configurações inválidas definindo combinações de configurações de parâmetro inválidas.
A diretiva *InvalidCombination é usada para essa finalidade. O valor de *InvalidCombination é uma LIST que nomeia duas ou mais configurações de parâmetro que não podem ser usadas juntas. A sintaxe usada para especificar uma configuração de parâmetro está na notação EBNF, como mostra o exemplo de código a seguir.
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])
A diretiva *InvalidCombination deve aparecer no contexto raiz do arquivo GDL.
Por exemplo, se você quisesse evitar a chuva nos fins de semana, poderia especificar o código a seguir.
*InvalidCombination: LIST(Weather.Rain, Today.Saturday)
*InvalidCombination: LIST(Weather.Rain, Today.Sunday)
Se você quisesse evitar a chuva nos fins de semana somente se estivesse íntegro, poderia especificar o código a seguir.
*InvalidCombination: LIST(Weather.Rain, Today.Saturday, Health.Well)
*InvalidCombination: LIST(Weather.Rain, Today.Sunday, Health.Well)
A diretiva *InvalidCombination no exemplo de código anterior especifica que qualquer configuração que contenha a combinação específica (Weather.Rain, Today.Sunday, Health.Well ou Weather.Rain, Today.Saturday, Health.Well) viola a diretiva .
A diretiva *InvalidCombination é um tipo específico de restrição. As funções do analisador GDL determinam se a configuração fornecida viola qualquer uma das restrições definidas no arquivo GDL antes de prosseguir. Se uma violação for detectada, a configuração será modificada (ou resolvida) para evitar violar a restrição. Essa situação é chamada de resolução da restrição. Centenas de restrições que envolvem dezenas de parâmetros podem existir em um único arquivo GDL. As restrições podem formar uma rede complexa de interações para que uma alteração na configuração de um parâmetro possa causar uma cascata de alterações em outros parâmetros.
Nota Você deve garantir que a configuração padrão não viole nenhuma restrição. Se isso acontecer, nenhuma das funções de interface do analisador terá êxito.
Nota O analisador GDL também aceita um caso especial de *InvalidCombination que envolve apenas duas configurações de parâmetro.