Compartilhar via


Uniões de construção GDL

Se vários constructos com o mesmo tipo de construção e marca de construção forem definidos no arquivo de origem GDL, a representação lógica desse constructo (o constructo lógico) conterá a união do conteúdo dos constructos originais definidos no arquivo de origem GDL.

O tipo de construção e a marca de construção juntos especificam ou definem exclusivamente um constructo lógico (dentro do contexto de seu pai). Ao contrário do XML, quando dois constructos irmãos são definidos, cada um com o mesmo tipo de construção e a marca de construção, o resultado é um constructo lógico. Na verdade, as construções não precisam nem ser irmãos sintáticos, podem ser irmãos lógicos. (Irmãos sintáticos residem explicitamente no mesmo corpo de construção, e os irmãos lógicos são ambos filhos da mesma construção lógica.)

O conteúdo do constructo lógico é uma união do conteúdo dos irmãos. O que aparece no instantâneo são os constructos lógicos, não os constructos, pois são originalmente definidos sintaticamente no arquivo de origem GDL. No exemplo de código a seguir, há dois constructos irmãos, ambos com Tipo de Construção: *Pessoa e com Marca de Construção: FlorenceF.

*Person: FlorenceF
{
*Name: Florence Flipo
*Company:Contoso Pharmaceuticals
{
*Location: Redmond, WA
}
}
*Person: FlorenceF
{
*Position: CEO
*Company:Contoso Pharmaceuticals
{
*NumberOfEmployees: 43,000
}
}

De acordo com a regra anterior, os dois irmãos definem um único constructo lógico que contém a união de ambos os irmãos.

*Person: FlorenceF
{
*Name: Florence Flipo
*Company:Contoso Pharmaceuticals
{
*Location: Redmond, WA
}
*Position: CEO
*Company:Contoso Pharmaceuticals
{
*NumberOfEmployees: 43,000
}
}

Observe que a mesclagem no exemplo anterior criou dois novos constructos irmãos que têm o mesmo Tipo de Construção: *Empresa e Marca de Construção: Contoso Pharmaceuticals.

Se a mesma regra fosse aplicada novamente (recursivamente), o código a seguir resultaria.

*Person: FlorenceF
{
*Name: Florence Flipo
*Company:Contoso Pharmaceuticals
{
*Location: Redmond, WA
*NumberOfEmployees: 43,000
}
*Position: CEO
}

Qualquer um dos três fragmentos de GDL anteriores, quando eles são analisados, produz a mesma representação interna. A representação interna se assemelha mais ao último fragmento.

Quando atributos com o mesmo palavra-chave são multiplicados definidos, nenhuma mesclagem ocorre. Cada definição ainda existe na representação interna. A diretiva de modelo *Additive é usada para especificar qual valor ou valores são transferidos para o instantâneo.

O analisador GDL usa a representação sintática do fluxo GDL e cria uma representação lógica interna dos comandos GDL. A representação interna desses comandos é convertida em XML e torna-se um instantâneo.