C. OpenMP C と C++ の文法
C.1 表記
文法規則は、非ターミナルの名前に続いてコロン、別の行の置換代替で構成されます。
構文式用語 opt は、置換内で用語が省略可能であることを示します。
構文式 termoptseq は term-seqopt と同等で、次の追加規則があります。
term-seq:
term
term-seqterm
term-seq,term
C.2 規則
表記は、C 標準のセクション 6.1 で説明されています。 この文法付録では、OpenMP C および C++ ディレクティブの基本言語文法の拡張機能を示します。
/* 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
/* 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 parallelparallel-clauseoptseqnew-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 forfor-clauseoptseqnew-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 sectionssections-clauseoptseqnew-line
sections-clause:
data-clause
nowait
section-scope:
{ section-sequence }
section-sequence:
section-directiveoptstructured-block
section-sequence section-directive structured-block
section-directive:
# pragma omp sectionnew-line
single-construct:
single-directive structured-block
single-directive:
# pragma omp singlesingle-clauseoptseqnew-line
single-clause:
data-clause
nowait
parallel-for-construct:
parallel-for-directive iteration-statement
parallel-for-directive:
# pragma omp parallel forparallel-for-clauseoptseqnew-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 sectionsparallel-sections-clauseoptseqnew-line
parallel-sections-clause:
unique-parallel-clause
data-clause
master-construct:
master-directive structured-block
master-directive:
# pragma omp masternew-line
critical-construct:
critical-directive structured-block
critical-directive:
# pragma omp criticalregion-phraseoptnew-line
region-phrase:
(identifier)
barrier-directive:
# pragma omp barriernew-line
atomic-construct:
atomic-directive expression-statement
atomic-directive:
# pragma omp atomicnew-line
flush-directive:
# pragma omp flushflush-varsoptnew-line
flush-vars:
(variable-list)
ordered-construct:
ordered-directive structured-block
ordered-directive:
# pragma omp orderednew-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