Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
C.1 Notation
The grammar rules consist of the name for a non-terminal, followed by a colon, followed by replacement alternatives on separate lines.
The syntactic expression termopt indicates that the term is optional within the replacement.
The syntactic expression termoptseq is equivalent to term-seqopt with the following additional rules:
term-seq:
term
term-seq term
term-seq ,
term
C.2 Rules
The notation is described in section 6.1 of the C standard. This grammar appendix shows the extensions to the base language grammar for the OpenMP C and C++ directives.
/* in C++ (ISO/IEC 14882:1998) */
statement-seq:
statement
openmp-directive
statement-seq statement
statement-seq openmp-directive
/* in C90 (ISO/IEC 9899:1990) */
statement-list:
statement
openmp-directive
statement-list statement
statement-list openmp-directive
/* in C99 (ISO/IEC 9899:1999) */
block-item:
declaration
statement
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:
statement
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 (
expression )
num_threads (
expression )
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
/* standard declarations */
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:
One of: + \* - & ^ | && ||
/* in C */
variable-list:
identifier
variable-list ,
identifier
/* in C++ */
variable-list:
id-expression
variable-list ,
id-expression