Compartilhar via


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:
instrução
openmp-directive
sequência de instruções
statement-seq openmp-directive

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

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

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

block-item:
declaração
instruçã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:
instrução

parallel-construct:
bloco estruturado de diretiva paralela

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

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 ( schedule-kind,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