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:
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.
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.
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.