Freigeben über


C. C- und C++-Grammatik in OpenMP

C.1 Notation
C.2 Regeln

C.1 Notation

Die Grammatikregeln bestehen aus dem Namen für ein Nicht-Terminal, gefolgt von einem Doppelpunkt, gefolgt von Ersetzungsalternativen in separaten Zeilen.

Der Syntaktikausdrucksausdruckopt gibt an, dass der Ausdruck innerhalb des Ersetzungstyps optional ist.

Der syntaktische Ausdruck termoptseq entspricht term-seqopt mit den folgenden zusätzlichen Regeln:

term-seq:
term
term-seq term
term-seq , term

C.2 Regeln

Die Notation wird in Abschnitt 6.1 des C-Standards beschrieben. In diesem Grammatikanhang sind die Erweiterungen für die Grammatik der Basissprache für die OpenMP C- und C++-Direktiven aufgeführt.

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

statement-seq:
Anweisung
openmp-directive
statement-seq statement
statement-seq openmp-directive

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

statement-list:
Anweisung
openmp-directive
statement-list-Anweisung
statement-list openmp-directive

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

block-item:
declaration
Anweisung
openmp-directive

/* standard statements */

statement:
openmp-construct

openmp-construct:
parallel-construct
for-construct
sections-construct
single-construct
parallel-for-construct
parallel-sections-construct
master-construct
critical-construct
atomic-construct
ordered-construct

openmp-directive:
barrier-directive
flush-directive

structured-block:
Anweisung

parallel-construct:
parallel-directive structured-block

parallel-directive:
# pragma omp parallel parallel-clauseoptseq new-line

parallel-clause:
unique-parallel-clause
data-clause

unique-parallel-clause:
if ( Ausdruck )
num_threads ( Ausdruck )

for-construct:
for-directive iteration-statement

for-directive:
# pragma omp for for-clauseoptseq new-line

for-clause:
unique-for-clause
data-clause
nowait

unique-for-clause:
ordered
schedule ( schedule-kind )
schedule ( schedule-kind , expression )

schedule-kind:
static
dynamic
guided
runtime

sections-construct:
sections-directive section-scope

sections-directive:
# pragma omp sections sections-clauseoptseq new-line

sections-clause:
data-clause
nowait

section-scope:
{ section-sequence }

section-sequence:
section-directiveopt structured-block
section-sequence section-directive structured-block

section-directive:
# pragma omp section new-line

single-construct:
single-directive structured-block

single-directive:
# pragma omp single single-clauseoptseq new-line

single-clause:
data-clause
nowait

parallel-for-construct:
parallel-for-directive iteration-statement

parallel-for-directive:
# pragma omp parallel for parallel-for-clauseoptseq new-line

parallel-for-clause:
unique-parallel-clause
unique-for-clause
data-clause

parallel-sections-construct:
parallel-sections-directive section-scope

parallel-sections-directive:
# pragma omp parallel sections parallel-sections-clauseoptseq new-line

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

master-construct:
master-directive structured-block

master-directive:
# pragma omp master new-line

critical-construct:
critical-directive structured-block

critical-directive:
# pragma omp critical region-phraseopt new-line

region-phrase:
(identifier)

barrier-directive:
# pragma omp barrier new-line

atomic-construct:
atomic-directive expression-statement

atomic-directive:
# pragma omp atomic new-line

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

flush-vars:
(variable-list)

ordered-construct:
ordered-directive structured-block

ordered-directive:
# pragma omp ordered new-line

/* Standarddeklarationen */

declaration:
threadprivate-directive

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

data-clause:
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 )

reduction-operator:
 Eines der Folgenden: + \* - & ^ | && ||

/* in C */

variable-list:
identifier
variable-list , identifier

/* in C++ */

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