Udostępnij za pośrednictwem


C. OpenMP C i gramatyka C++

C.1 Notacja
C.2 Reguły

C.1 Notacja

Reguły gramatyczne składają się z nazwy dla innego niż terminal, a następnie dwukropka, a następnie alternatywy zastępcze w oddzielnych wierszach.

Termin wyrażenia składniowego wskazuje, że termin jest opcjonalny w ramach zamiany.

Termin wyrażenia składniowego optseq jest odpowiednikiem wyrażenia term-seqz następującymi dodatkowymi regułami:

termin seq:
termin
termin-seq
termin-seq,

C.2 Reguły

Notacja została opisana w sekcji 6.1 standardu C. Ten dodatek gramatyczny przedstawia rozszerzenia gramatyki języka podstawowego dla dyrektyw OpenMP C i C++.

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

statement-seq:
wypowiedź
openmp-directive
statement-seq, instrukcja
statement-seq openmp-directive

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

statement-list:
wypowiedź
openmp-directive
statement-list, instrukcja
instrukcja-list openmp-directive

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

block-item:
deklaracja
wypowiedź
openmp-directive

/* standardowe instrukcje */

instrukcja:
konstrukcja openmp

konstrukcja openmp:
konstrukcja równoległa
konstrukcja for-construct
konstrukcja sekcji
pojedyncza konstrukcja
równoległa konstrukcja
konstrukcja równoległych sekcji
konstrukcja wzorca
konstrukcja krytyczna
konstrukcja niepodzielna
konstrukcja uporządkowana

openmp-directive:
dyrektywa barierowa
flush-dyrektywa

blok ustrukturyzowany:
wypowiedź

konstrukcja równoległa:
blok ustrukturyzowany dyrektywy równoległej

równoległa dyrektywa:
# pragma omp parallelparallel-clauseoptseq new-line

parallel-clause:
unique-parallel-klauzula
data-klauzula

unique-parallel-clause:
if (wyrażenie )
num_threads (wyrażenie )

dla konstrukcji:
for-directive iteration-statement

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

for-clause:
unique-for-clause
data-klauzula
nowait

unique-for-clause:
ordered
schedule (rodzaj harmonogramu )
schedule (rodzaj, harmonogramu wyrażenie )

rodzaj harmonogramu:
static
dynamic
guided
runtime

konstrukcja sekcji:
sekcja-dyrektywa zakresu sekcji

sekcja-dyrektywa:
# pragma omp sectionssekcja-klauzulaoptseq new-line

sekcja-klauzula:
data-klauzula
nowait

zakres sekcji:
{ sekcja-sekwencja }

sekwencja-sekcji:
section-directiveopt structured-block
section-sequence section-section-directive structured-block

sekcja-dyrektywa:
# pragma omp sectionnowy wiersz

pojedyncza konstrukcja:
blok ustrukturyzowany z jedną dyrektywą

pojedyncza dyrektywa:
# pragma omp singlepojedyncza klauzulaoptseq new-line

single-clause:
data-klauzula
nowait

równoległe do konstrukcji:
parallel-for-directive iteration-statement

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

parallel-for-clause:
unique-parallel-klauzula
unique-for-clause
data-klauzula

konstrukcja równoległych sekcji:
równoległe sekcje-zakres sekcji dyrektywy

parallel-sections-directive:
# pragma omp parallel sectionsparallel-sections-klauzulaoptseq new-line

parallel-sections-clause:
unique-parallel-klauzula
data-klauzula

konstrukcja wzorca:
blok ustrukturyzowany dyrektywy master

master-dyrektywa:
# pragma omp masternowy wiersz

konstrukcja krytyczna:
blok ustrukturyzowany dyrektywy krytycznej

krytyczna dyrektywa:
# pragma omp criticalfraza regionuwybieranie nowego wiersza

wyrażenie-region:
(identyfikator)

dyrektywa barierowa:
# pragma omp barriernowy wiersz

konstrukcja niepodzielna:
atomic-directive expression-statement

niepodzielna dyrektywa:
# pragma omp atomicnowy wiersz

flush-directive:
# pragma omp flushflush-varswybieranie nowego wiersza

flush-vars:
(lista zmiennych)

konstrukcja uporządkowana:
uporządkowany blok ustrukturyzowany dyrektywy

uporządkowana dyrektywa:
# pragma omp orderednowy wiersz

/* deklaracje standardowe */

deklaracja:
threadprivate-dyrektywa

threadprivate-dyrektywa:
# pragma omp threadprivate () lista zmiennych nowy wiersz

data-clause:
private (lista zmiennych )
copyprivate ( lista zmiennych )
firstprivate ( lista zmiennych )
lastprivate (lista zmiennych )
shared (lista zmiennych )
default ( shared )
default ( none )
reduction ( lista zmiennych operatorów : redukcji )
copyin ( lista zmiennych )

operator redukcji:
 Jeden z: + \* - & ^ | && ||

/* w C */

lista zmiennych:
identifier
identyfikator listy , zmiennych

/* w języku C++ */

lista zmiennych:
wyrażenie-identyfikatora
wyrażenie-id-list , zmiennych