Definizione dei parametri dati Configuration-Dependent
I parametri vengono introdotti usando il costrutto *Funzionalità . Il tag costrutto del costrutto *Features identifica il parametro (o definisce il nome del parametro, noto anche come nome della funzionalità).
Il contenuto del costrutto *Features può essere costituito da uno o più costrutti di opzione. I costrutti *Option definiscono i valori consentiti o gli stati in cui è possibile inserire il parametro. Il tag costrutto del costrutto *Option identifica un valore o uno stato consentiti. Questo tag di costrutto viene chiamato anche il nome dell'opzione.
Ad esempio, è possibile definire un parametro denominato Today che può richiedere un giorno della settimana come valore, come illustrato nell'esempio di codice seguente:
*Feature: Today
{
*Option: Sunday{}
*Option: Monday{}
*Option: Tuesday{}
*Option: Wednesday{}
*Option: Thursday{}
*Option: Friday{}
*Option: Saturday{}
}
Nell'esempio precedente il parametro Today può accettare un solo valore in qualsiasi momento. Oggi non può essere sia domenica che martedì. Tuttavia, non tutti i parametri non sono limitati ai valori esclusivi; possono accettare uno o più valori alla volta. Ad esempio, se si dispone di un robot che può contenere più colori di penna contemporaneamente, è possibile definire un parametro PenColors per descrivere i colori attualmente presenti nella sua mano. È possibile specificare PenColors: (rosso E verde e giallo) e che potrebbe essere perfettamente valido.
La direttiva riservata *UIType consente di designare se un parametro può accettare solo un singolo valore in qualsiasi momento (PICKONE) o se è possibile assegnare più valori a tale parametro in un determinato momento (PICKMANY). La direttiva *UIType viene posizionata come voce figlio del costrutto *Features .
Nota GDL non consente l'assegnazione di "niente" a un parametro. Pertanto, per descrivere il robot che non contiene penne, è necessario dichiarare un'opzione denominata None o Off per i parametri PICKMANY. Il nome dell'opzione usato non è importante; è possibile designare l'opzione assegnata a questa proprietà usando la direttiva *NoneOption . L'opzione che *NoneOption designa non è compatibile con nessuna delle altre opzioni.
È possibile definire quanti costrutti di funzionalità hanno parametri. Tutti i costrutti di funzionalità devono risiedere nel contesto radice. Il contesto radice non ha alcun costrutto padre.