Share via


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

statement:

/* standard statements */

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:

/* standard declarations */

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