Sdílet prostřednictvím


C. Gramatika jazyků C a C++ v prostředí OpenMP

C.1 Zápis
C.2 Pravidla

C.1 Zápis

Gramatická pravidla se skládají z názvu non-terminalu, následovaného dvojtečku, následované nahrazením alternativ na samostatných řádcích.

Výraz syntaktického výrazu označuje, že termín je v rámci nahrazení nepovinný.

Výraz syntaktického výrazu optseq je ekvivalentní výrazu term-seq opt s následujícími dalšími pravidly:

term-seq:
semestr
term-seq term
term-seq , term

C.2 Pravidla

Zápis je popsaný v bodě 6.1 standardu C. Tato gramatická příloha ukazuje rozšíření gramatiky základního jazyka pro direktivy C a C++ OpenMP.

/* v C++ (ISO/IEC 14882:1998) */

statement-seq:
výrok
openmp-direktiva
statement-seq – příkaz
statement-seq openmp-direktiva

/* v C90 (ISO/IEC 9899:1990) */

statement-list:
výrok
openmp-direktiva
statement-list – příkaz
statement-list openmp-direktiva

/* v C99 (ISO/IEC 9899:1999) */

block-item:
prohlášení
výrok
openmp-direktiva

/* standardní příkazy */

příkaz:
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-direktiva:
bariérová direktiva
flush-direktiva

strukturovaný blok:
výrok

parallel-construct:
parallel-directive structured-block

parallel-direktiva:
# pragma omp parallelparallel-clauseoptseq new-line

parallel-clause:
unique-parallel-clause
klauzule data

unique-parallel-clause:
if (výraz )
num_threads (výraz )

for-construct:
for-direktiva iteration-statement

for-directive:
# pragma omp forfor-clauseoptseq new-line

for-clause:
unique-for-clause
klauzule data
nowait

unique-for-clause:
ordered
schedule (schedule-kind )
schedule (schedule-kind, výraz )

druh plánu:
static
dynamic
guided
runtime

sections-construct:
sections-directive section-scope

sections-direktiva:
# pragma omp sectionssections-clauseoptseq new-line

sections-clause:
klauzule data
nowait

section-scope:
{ section-sequence }

section-sequence:
oddíl-direktivaopt structured-block
section-sequence section-directive structured-block

section-directive:
# pragma omp sectionnew-line

single-construct:
strukturovaný blok s jednou direktivou

single-direktiva:
# pragma omp singlesingle-clauseoptseq new-line

single-clause:
klauzule data
nowait

parallel-for-construct:
parallel-for-direktiv iteration-statement

parallel-for-directive:
# pragma omp parallel forparallel-for-clauseoptseq new-line

parallel-for-clause:
unique-parallel-clause
unique-for-clause
klauzule data

parallel-sections-construct:
paralelně-sections-directive section-scope

parallel-sections-direktiva:
# pragma omp parallel sectionsparallel-sections-clauseoptseq new-line

parallel-sections-clause:
unique-parallel-clause
klauzule data

master-construct:
hlavní direktiva – strukturovaný blok

master-direktiva:
# pragma omp masternew-line

critical-construct:
strukturovaný blok se strukturovanou direktivou

critical-directive:
# pragma omp criticalregion-phraseopt new-line

frázi oblasti:
(identifikátor)

bariérová direktiva:
# pragma omp barriernew-line

atomic-construct:
atomic-direktiva expression-statement

atomic-direktiva:
# pragma omp atomicnew-line

flush-direktiva:
# pragma omp flushflush-varsopt new-line

flush-vars:
(seznam proměnných)

ordered-construct:
řazené direktivy strukturované bloky

ordered-direktiva:
# pragma omp orderednew-line

/* standardní deklarace */

deklarace:
threadprivate-direktiva

threadprivate-direktiva:
# pragma omp threadprivate (seznam proměnných) new-line

klauzule data:
private (seznam proměnných )
copyprivate ( seznam proměnných )
firstprivate ( seznam proměnných )
lastprivate (seznam proměnných )
shared (seznam proměnných )
default ( shared )
default ( none )
reduction ( seznam proměnných operátoru : redukce )
copyin ( seznam proměnných )

redukční operátor:
 Jedna z těchto možností: + \* - & ^ | && ||

/* v C */

variable-list:
identifikátor
identifikátor seznamu , proměnných

/* v C++ */

variable-list:
id-expression
variable-list , id-expression