C. Gramática C e C++ do OpenMP

Saiba mais sobre as regras gramaticais e as 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.

A expressão sintática termopt indica que o termo é opcional dentro da substituição.

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

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

Regras de C.2

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

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

statement-seq:
  declaração
  openmp-directive
  sequência de instruções
  statement-seq openmp-directive

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

statement-list:
  declaração
  openmp-directive
  declaração de lista de instruções
  statement-list openmp-directive

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

block-item:
  declaração
  declaração
  openmp-directive

/* instruções padrão */

declaração:
  openmp-construct

openmp-construct:
  parallel-construct
  for-construct
  sections-construct
  construção única
  parallel-for-construct
  parallel-sections-construct
  master-construct
  critical-construct
  atomic-construct
  ordered-construct

openmp-directive:
  diretiva de barreira
  flush-directive

bloco estruturado:
  declaração

parallel-construct:
  bloco estruturado de diretiva paralela

parallel-directive:
  # pragma omp parallel cláusula-paralelaoptseqnova-linha

cláusula paralela:
  cláusula única-paralela
  cláusula de dados

cláusula unique-parallel:
  if ( expressão)
  num_threads ( expressão)

for-construct:
  instrução de iteração for-diretiva

for-directive:
  # pragma omp for for-clauseoptseqnew-line

for-clause:
  cláusula única
  cláusula de dados
  nowait

unique-for-clause:
  ordered
  schedule ( tipo de agenda)
  schedule ( tipo de agenda,expressão)

tipo de agendamento:
  static
  dynamic
  guided
  runtime

sections-construct:
  diretiva-de-seções escopo-da-seção

sections-directive:
  # pragma omp sections sections-clauseoptseqnew-line

cláusula de seções
  cláusula de dados
  nowait

escopo da seção:
  { section-sequence }

sequência de seção:
  section-directiveoptstructured-block
  sequência-de-seção diretiva-de-seção bloco-estruturado

section-directive:
  # pragma omp section new-line

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

diretiva única:
  # pragma omp single cláusula únicaoptseqnew-line

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

parallel-for-construct:
  parallel-for-directive declaração de iteração

parallel-for-directive:
  # pragma omp parallel for parallel-for-clauseoptseqnew-line

parallel-for-clause:
  cláusula única-paralela
  cláusula única
  cláusula de dados

parallel-sections-construct:
  diretiva-de-seções-paralelas escopo-da-seção

parallel-sections-directive:
  # pragma omp parallel sections parallel-sections-clauseoptseqnew-line

parallel-sections-clause:
  cláusula única-paralela
  cláusula de dados

master-construct:
  diretiva-mestra bloco-estruturado

master-directive:
  # pragma omp master new-line

critical-construct:
  bloco estruturado de diretiva crítica

diretiva crítica:
  # pragma omp critical region-phraseoptnew-line

region-phrase:
  (identificador)

diretiva de barreira:
  # pragma omp barrier new-line

atomic-construct:
  atomic-directive expression-statement

atomic-directive:
  # pragma omp atomic new-line

flush-directive:
  # pragma omp flush flush-varsoptnew-line

flush-vars:
  (lista de variáveis)

ordered-construct:
  diretiva-ordenada bloco-estruturado

ordered-directive:
  # pragma omp ordered new-line

/* declarações padrão */

declaração:
  threadprivate-directive

threadprivate-directive:
  # pragma omp threadprivate ( variable-list)new-line

cláusula de dados:
  private ( variable-list)
  copyprivate ( variable-list)
  firstprivate ( variable-list)
  lastprivate ( variable-list)
  shared ( variable-list)
  default ( shared )
  default ( none )
  reduction ( operador de redução:lista de variáveis)
  copyin ( variable-list)

operador de redução:
 Uma destas opções: + \* - & ^ | && ||

/* em C */

variable-list:
  identificador
  variable-list,identificador

/* no C++ */

variable-list:
  id-expression
  variable-list,id-expression