Condividi tramite


C. Grammatica OpenMP C e C++

C.1 Notazione
C.2 Regole

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 parallelclausola 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 forfor-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 sectionssections-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 sectionnuova riga

costrutto singolo:
blocco strutturato a direttiva singola

direttiva singola:
# pragma omp singleclausola singolaoptseq new-line

single-clause:
clausola data
nowait

parallel-for-construct:
istruzione iterazione parallel-for-directive

parallel-for-directive:
# pragma omp parallel forparallel-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 sectionsparallel-sections-clauseoptseq new-line

parallel-sections-clause:
unique-parallel-clause
clausola data

master-construct:
master-directive structured-block

direttiva master:
# pragma omp masternuova riga

critical-construct:
critical-directive structured-block

direttiva critical:
# pragma omp criticalregion-phraseopt new-line

region-phrase:
(identificatore)

direttiva barriera:
# pragma omp barriernuova riga

atomic-construct:
espressione-istruzione di direttiva atomica

direttiva atomic:
# pragma omp atomicnuova riga

flush-directive:
# pragma omp flushflush-varsopt new-line

flush-vars:
(variable-list)

ordered-construct:
ordered-directive structured-block

direttiva ordered:
# pragma omp orderednuova 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