表記規則については、C 規格のセクション 6.1 を参照してください。この文法付録は、OpenMP の C ディレクティブと C++ ディレクティブの基本言語文法を補足するものです。
/* C++ (ISO/IEC 14882:1998) の場合*/
statement-seq:
statement
openmp-directive
statement-seq statement
statement-seq openmp-directive
/* C90 (ISO/IEC 9899:1990) の場合*/
statement-list:
statement
openmp-directive
statement-list statement
statement-list openmp-directive
/* C99 (ISO/IEC 9899:1999) の場合*/
block-item:
declaration
statement
openmp-directive
statement:
/* 標準的なステートメント */
openmp-construct
openmp-construct:
parallel-construct
for-construct
sections-construct
single-construct
parallel-for-construct
parallel-sections-construct
master-construc
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
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:
+ * - & ^ | && || のいずれか
/* C の場合*/
variable-list:
identifier
variable-list , identifier
/* C++ の場合*/
variable-list:
id-expression
variable-list , id-expression