Sdílet prostřednictvím


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

Přečtěte si o gramatických pravidlech a rozšířeních syntaxe v jazyce C a C++ pro OpenMP, a to v architektuře paralelního programování.

Zápis C.1

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-seqterm
term-seq,termín

Pravidla C.2

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) */

seznam-výroků:
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
konstrukce paralelních sekcí
master-construct
critical-construct
atomic-construct
ordered-construct

openmp-direktiva:
bariérová direktiva
flush-direktiva

strukturovaný blok:
výrok

parallel-construct:
parallelní směrnice strukturovaný blok

parallel-direktiva:
# pragma omp parallel parallel-clauseoptseqnew-line

paralelní klauzule:
unikátní-paralelní-věta
klauzule data

jedinečná-paralelní-věta:
if ( výraz)
num_threads ( výraz)

for-construct:
for-direktiva iteration-statement

for-directive:
# pragma omp for for-clauseoptseqnový řádek

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

jedinečný pro větu:
ordered
schedule ( schedule-kind)
schedule ( schedule-kind,výraz )

druh plánu:
static
dynamic
guided
runtime

sections-construct:
sekce-direktiva rozsah-sekce

sections-direktiva:
# pragma omp sections sections-clauseoptseqnew-line

sekce-klauzule:
klauzule data
nowait

rozsah sekce:
{ section-sequence }

section-sequence:
oddíl-direktivaoptstructured-block
sekvence-sekce směrnice-sekce strukturovaný-blok

section-directive:
# pragma omp section nový řádek

single-construct:
strukturovaný blok s jednou direktivou

single-direktiva:
# pragma omp single jednoduchá klauzuleoptseqnový řádek

single-clause:
klauzule data
nowait

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

parallel-for-directive:
# pragma omp parallel for parallel-for-clauseoptseqnew-line

parallel-for-clause:
unikátní-paralelní-věta
unique-for-clause
klauzule data

konstrukce paralelních sekcí:
paralelně-sections-directive section-scope

parallel-sections-direktiva:
# pragma omp parallel sections parallel-sections-clauseoptseqnew-line

ustanovení o paralelních sekcích:
unikátní-paralelní-věta
klauzule data

master-construct:
hlavní direktiva – strukturovaný blok

master-direktiva:
# pragma omp master nový řádek

critical-construct:
strukturovaný blok se strukturovanou direktivou

critical-directive:
# pragma omp critical region-phraseoptnew-line

frázi oblasti:
(identifikátor)

bariérová direktiva:
# pragma omp barrier nový řádek

atomic-construct:
atomic-direktiva expression-statement

atomic-direktiva:
# pragma omp atomic nový řádek

flush-direktiva:
# pragma omp flush flush-varsoptnew-line

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

ordered-construct:
řazené direktivy strukturované bloky

ordered-direktiva:
# pragma omp ordered nový řádek

/* 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
seznam proměnných,id-expression