C. OpenMP C i gramatyka C++
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 parallel
parallel-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 for
for-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 sections
sekcja-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 section
nowy wiersz
pojedyncza konstrukcja:
blok ustrukturyzowany z jedną dyrektywą
pojedyncza dyrektywa:
# pragma omp single
pojedyncza klauzulaoptseq new-line
single-clause:
data-klauzula
nowait
równoległe do konstrukcji:
parallel-for-directive iteration-statement
parallel-for-directive:
# pragma omp parallel for
parallel-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 sections
parallel-sections-klauzulaoptseq new-line
parallel-sections-clause:
unique-parallel-klauzula
data-klauzula
konstrukcja wzorca:
blok ustrukturyzowany dyrektywy master
master-dyrektywa:
# pragma omp master
nowy wiersz
konstrukcja krytyczna:
blok ustrukturyzowany dyrektywy krytycznej
krytyczna dyrektywa:
# pragma omp critical
fraza regionuwybieranie nowego wiersza
wyrażenie-region:
(identyfikator)
dyrektywa barierowa:
# pragma omp barrier
nowy wiersz
konstrukcja niepodzielna:
atomic-directive expression-statement
niepodzielna dyrektywa:
# pragma omp atomic
nowy wiersz
flush-directive:
# pragma omp flush
flush-varswybieranie nowego wiersza
flush-vars:
(lista zmiennych)
konstrukcja uporządkowana:
uporządkowany blok ustrukturyzowany dyrektywy
uporządkowana dyrektywa:
# pragma omp ordered
nowy 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