C. OpenMP C と C++ の文法

C.1 表記
C.2 規則

C.1 表記

文法規則は、非ターミナルの名前に続いてコロン、別の行の置換代替で構成されます。

構文式用語 opt は、置換内で用語が省略可能であることを示します。

構文式 termoptseqterm-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