C. Gramática de OpenMP para C e C++

Saiba mais sobre as regras gramaticais e extensões de sintaxe em C e C++ para OpenMP, uma estrutura de programação paralela.

Notação C.1

As regras gramaticais consistem no nome de um não-terminal, seguido por dois pontos, seguido por alternativas de substituição em linhas separadas.

O termo de expressão sintáticaopt indica que o termo é opcional dentro da substituição.

A expressão sintática termooptseq é equivalente a term-seqopt com as seguintes regras adicionais:

termo-seq:
  termo
  termo-seqtermo
  termo-seq,termo

C.2 Regras

A notação é descrita na secção 6.1 da norma C. Este apêndice gramatical mostra as extensões para a gramática da linguagem base para as diretivas OpenMP C e C++.

/* em C++ (ISO/IEC 14882:1998) */

enunciado-seq:
  Declaração
  diretiva OpenMP
  declaração-seq declaração
  statement-seq OpenMP diretiva

/* em C90 (ISO/IEC 9899:1990) */

lista de declarações:
  Declaração
  diretiva OpenMP
  declaração de lista de declarações
  Lista de Instruções Diretiva OpenMP

/* em C99 (ISO/IEC 9899:1999) */

bloco de itens:
  Declaração
  Declaração
  diretiva OpenMP

/* Declarações normalizadas */

Declaração:
  openmp construct

openmp-construir:
  construção paralela
  for-construct
  seções-estrutura
  construção única
  paralelo para construção
  Construção de seções paralelas
  mestre-construtor
  conceito crítico
  construção atómica
  construção ordenada

OpenMP Directive:
  directiva-barreira
  diretiva de limpeza

bloco-estruturado:
  Declaração

construção paralela:
  bloco estruturado com diretiva paralela

Diretiva paralela:
  # pragma omp parallel cláusula paralelaoptseqnew-line

cláusula paralela:
  Cláusula Única-Paralela
  Cláusula de dados

Cláusula Única-Paralela:
  if ( expressão)
  num_threads ( expressão)

para-construir:
  declaração de iteração do tipo 'for'

para a diretiva:
  # pragma omp for cláusula-foroptseqnova-linha

cláusula for:
  Cláusula única
  Cláusula de dados
  nowait

Cláusula exclusiva:
  ordered
  schedule ( tipo de agendamento)
  schedule ( , expressão)

tipo de horário:
  static
  dynamic
  guided
  runtime

construção de seções:
  secções-directiva secção-âmbito de aplicação

Seções-Diretiva:
  # pragma omp sections secções-cláusulasoptseqnew-line

secções-cláusulas:
  Cláusula de dados
  nowait

Âmbito da secção:
  { sequência de secção }

seqüência de seção:
  secção-diretivaopçãobloco-estruturado
  seção-seqüência-seção-diretiva estruturada-bloco

secção-directiva:
  # pragma omp section nova linha

construção única:
  bloco estruturado de diretiva única

Diretiva única:
  # pragma omp single cláusula únicaoptseqnova linha

cláusula única:
  Cláusula de dados
  nowait

paralelo para construção:
  declaração de iteração paralela para diretiva

Paralelamente à diretiva:
  # pragma omp parallel for cláusula para paralelizaçãooptseqnova-linha

cláusula de parallel-for:
  Cláusula Única-Paralela
  Cláusula única
  Cláusula de dados

Construção de secções paralelas:
  Secções paralelas-Directiva Âmbito de aplicação

Secção paralela-directiva:
  # pragma omp parallel sections cláusula de seções paralelasoptseqnew-line

Cláusula de secções paralelas:
  Cláusula Única-Paralela
  Cláusula de dados

mestre de construção:
  bloco estruturado da diretiva-mestra

directiva-mestre:
  # pragma omp master nova linha

construção crítica:
  Bloco estruturado de diretiva crítica

Directiva-crítica:
  # pragma omp critical região-fraseopçãonova-linha

região-frase:
  (identificador)

diretiva-barreira:
  # pragma omp barrier nova linha

construção atómica:
  declaração de expressão com diretiva atômica

diretiva atómica:
  # pragma omp atomic nova linha

diretiva de esvaziamento:
  # pragma omp flush flush-varsopçãonova-linha

limpar-variáveis:
  (lista variável)

ordered-construct:
  Bloco estruturado de diretiva ordenada

diretiva ordenada:
  # pragma omp ordered nova linha

/* Declarações normalizadas */

Declaração:
  ThreadPrivate-diretiva

ThreadPrivate-Diretiva:
  # pragma omp threadprivate ( lista) de variáveisnova linha

Cláusula de dados:
  private ( lista de variáveis)
  copyprivate ( lista de variáveis)
  firstprivate ( lista de variáveis)
  lastprivate ( lista de variáveis)
  shared ( lista de variáveis)
  default ( shared )
  default ( none )
  reduction ( operador: de reduçãolista de variáveis)
  copyin ( lista de variáveis)

operador de redução:
 Um dos seguintes: + \* - & ^ | && ||

/* em C */

lista de variáveis:
  identificador
  lista, de variáveisidentificador

/* em C++ */

lista de variáveis:
  id-expressão
  lista de variáveis,id-expressão