Definindo os parâmetros de dados Configuration-Dependent
Os parâmetros são introduzidos usando o constructo *Features . A marca de construção do constructo *Features identifica o parâmetro (ou define o nome do parâmetro, que também é conhecido como o nome do recurso).
O conteúdo do constructo *Features pode consistir em um ou mais constructos *Option . Os constructos *Option definem os valores permitidos ou os estados em que o parâmetro pode estar. A marca de construção do constructo *Option identifica um valor ou estado permitido. Essa marca de construção também é chamada de nome de opção.
Por exemplo, você pode definir um parâmetro chamado Hoje que pode levar um dia da semana como seu valor, como mostra o exemplo de código a seguir.
*Feature: Today
{
*Option: Sunday{}
*Option: Monday{}
*Option: Tuesday{}
*Option: Wednesday{}
*Option: Thursday{}
*Option: Friday{}
*Option: Saturday{}
}
No exemplo anterior, o parâmetro Today pode levar apenas um valor a qualquer momento. Hoje não pode ser domingo e terça-feira. No entanto, nem todos os parâmetros estão limitados a valores exclusivos; eles podem ter um ou mais valores de cada vez. Por exemplo, se você tiver um robô que possa conter mais de uma cor de caneta na mão ao mesmo tempo, poderá definir um parâmetro PenColors para descrever as cores que estão atualmente em sua mão. Você pode especificar PenColors: (Vermelho E Verde E Amarelo) e isso pode ser perfeitamente válido.
A diretiva reservada *UIType permite que você designe se um parâmetro pode usar apenas um único valor a qualquer momento (PICKONE) ou se vários valores podem ser atribuídos a esse parâmetro em um determinado momento (PICKMANY). A diretiva *UIType é posicionada como uma entrada filho do constructo *Features .
Nota A GDL não permite que "nada" seja atribuído a um parâmetro. Portanto, para descrever o robô que não contém canetas, você deve declarar uma opção chamada None ou Off para parâmetros PICKMANY. O nome da opção que é usado não é importante; você pode designar qual opção é atribuída a essa propriedade usando a diretiva *NoneOption . A opção que *NoneOption designa não é compatível com nenhuma das outras opções.
Você pode definir quantos *Constructos de recurso tiverem parâmetros. Todos os *constructos de recurso devem residir no contexto raiz. O contexto raiz não tem nenhum constructo pai.