C. Grammatica OpenMP C e C++
C.1 Notazione
Le regole grammaticali sono costituite dal nome di un non terminale, seguito da due punti, seguito da alternative di sostituzione su righe separate.
Il terminedi espressione sintattica opt indica che il termine è facoltativo all'interno della sostituzione.
Il terminedi espressione sintattica optseq equivale al termine-seqopt con le regole aggiuntive seguenti:
term-seq:
term
termine-seq
termine-seq,
C.2 Regole
La notazione è descritta nella sezione 6.1 dello standard C. Questa appendice grammaticale mostra le estensioni della grammatica del linguaggio di base per le direttive OpenMP C e C++.
/* in C++ (ISO/IEC 14882:1998) */
statement-seq:
statement
direttiva openmp
istruzione statement-seq
statement-seq openmp-directive
/* in C90 (ISO/IEC 9899:1990) */
statement-list:
statement
direttiva openmp
statement-list statement
statement-list openmp-directive
/* in C99 (ISO/IEC 9899:1999) */
block-item:
declaration
statement
direttiva openmp
Istruzioni standard /* */
statement:
openmp-construct
openmp-construct:
costrutto parallelo
for-construct
costrutto sezioni
costrutto singolo
parallel-for-construct
costrutto di sezioni parallele
master-construct
costrutto critico
atomic-construct
costrutto ordinato
openmp-directive:
direttiva barriera
direttiva flush-directive
structured-block:
statement
costrutto parallelo:
blocco strutturato di direttiva parallela
direttiva parallela:
# pragma omp parallel
clausola parallelaoptseq new-line
clausola parallela:
unique-parallel-clause
clausola data
unique-parallel-clause:
if (
expression )
num_threads (
expression )
for-construct:
istruzione for-directive iteration-statement
for-directive:
# pragma omp for
for-clauseoptseq new-line
for-clause:
unique-for-clause
clausola data
nowait
unique-for-clause:
ordered
schedule (
tipo di pianificazione )
schedule (
tipo di,
pianificazione espressione )
tipo di pianificazione:
static
dynamic
guided
runtime
sections-construct:
section-directive section-scope
direttiva sections:Sections-directive:
# pragma omp sections
sections-clauseoptseq new-line
sections-clause:
clausola data
nowait
ambito sezione:
{ section-sequence }
sequenza di sezioni:
section-directiveopt structured-block
section-sequence section-directive structured-block
sezione-direttiva:
# pragma omp section
nuova riga
costrutto singolo:
blocco strutturato a direttiva singola
direttiva singola:
# pragma omp single
clausola singolaoptseq new-line
single-clause:
clausola data
nowait
parallel-for-construct:
istruzione iterazione parallel-for-directive
parallel-for-directive:
# pragma omp parallel for
parallel-for-clauseoptseq new-line
parallel-for-clause:
unique-parallel-clause
unique-for-clause
clausola data
costrutto parallel-sections:
parallel-sections-directive section-scope
direttiva parallel-sections-directive:
# pragma omp parallel sections
parallel-sections-clauseoptseq new-line
parallel-sections-clause:
unique-parallel-clause
clausola data
master-construct:
master-directive structured-block
direttiva master:
# pragma omp master
nuova riga
critical-construct:
critical-directive structured-block
direttiva critical:
# pragma omp critical
region-phraseopt new-line
region-phrase:
(identificatore)
direttiva barriera:
# pragma omp barrier
nuova riga
atomic-construct:
espressione-istruzione di direttiva atomica
direttiva atomic:
# pragma omp atomic
nuova riga
flush-directive:
# pragma omp flush
flush-varsopt new-line
flush-vars:
(variable-list)
ordered-construct:
ordered-directive structured-block
direttiva ordered:
# pragma omp ordered
nuova riga
Dichiarazioni standard /* */
declaration:
threadprivate-directive
threadprivate-directive:
# pragma omp threadprivate (
variable-list)
nuova riga
clausola data:
private (
variable-list )
copyprivate (
variable-list )
firstprivate (
variable-list )
lastprivate (
variable-list )
shared (
variable-list )
default ( shared )
default ( none )
reduction (
reduction-operator :
variable-list )
copyin (
variable-list )
Operatore di riduzione:
Uno dei seguenti: + \* - & ^ | && ||
/* in C */
variable-list:
identificatore
identificatore variable-list,
/* in C++ */
variable-list:
id-expression
variable-list ,
id-expression