Partilhar via


Diretiva de modelo de produção

A diretiva *Modelo de produção especifica combinações válidas de membros que podem aparecer em um constructo específico. Essa diretiva só pode aparecer em modelos com *Tipo: CONSTRUCT.

Se essa diretiva estiver presente, a produção será avaliada em relação a cada instância de um constructo associado ao modelo de host da produção. O modelo de host é o modelo que contém a diretiva Production. Se a diretiva De produção for avaliada como FALSE, uma mensagem de aviso será emitida, mas o processamento não será afetado de outra forma. Se o modelo de host não contiver diretivas de produção, nenhuma validação será executada.

A diretiva *Production aparece no nível raiz do constructo do modelo de host. Se mais de uma *diretiva de produção aparecer no nível raiz, somente a diretiva definida mais recentemente será avaliada. O resultado da avaliação de uma diretiva Production é um valor booliano.

A diretiva *Production é, em si, uma construção. Os elementos filho da diretiva *Production são outros constructos *Production ou *Constructos de membro ou uma combinação de ambos (também chamados de produções filho). Você não pode usar diretivas de namespace dentro da diretiva *Production.

Cada produção filho contida na diretiva *Production também é avaliada como TRUE ou FALSE. A diretiva Produção é avaliada pela primeira vez avaliando cada uma de suas produções filho. O resultado da diretiva de produção pai delimitador é obtido executando uma operação lógica simples nos resultados de cada uma das produções filho. O tipo de operação lógica a ser aplicada é especificado por vValue da diretiva *Production.

O valor da diretiva *Production pode ser um dos seguintes símbolos: EXACTLY_ONE, SATISFY_ALL ou AT_LEAST_ONE.

O exemplo a seguir mostra uma diretiva de produção.

*Production: EXACTLY_ONE
{   ... child Productions ... }

O seguinte algoritmo define os valores da diretiva de produção:

  1. Se a produção especificar EXACTLY_ONE, essa produção será avaliada como TRUE se exatamente uma produção filho for avaliada como TRUE, com o restante sendo FALSE. Caso contrário, a produção será avaliada como FALSE.

  2. Se a produção especificar SATISFY_ALL, essa produção será avaliada como TRUE somente se todas as produções filho forem avaliadas como TRUE. Caso contrário, a produção será avaliada como FALSE.

  3. Se a produção especificar AT_LEAST_ONE, essa produção será avaliada como TRUE se pelo menos uma ou mais produções filho forem avaliadas como TRUE. Caso contrário, a produção será avaliada como FALSE.

*As diretivas de produção podem ser aninhadas para profundidade arbitrária.