C. OpenMP: gramatyka C i C++

Dowiedz się więcej o regułach gramatycznych i rozszerzeniach składni w języku C i C++ dla platformy OpenMP, równoległej platformy programowania.

Notacja C.1

Reguły gramatyczne składają się z nazwy dla nieterminalnego, po którym następuje dwukropek, a następnie alternatywy umieszczane w oddzielnych wierszach.

Wyrażenie składniowe terminopt wskazuje, że termin jest opcjonalny w kontekście zamiany.

Wyrażenie składniowe termoptseq jest równoważne term-seqopt zgodnie z następującymi dodatkowymi regułami:

sekwencja terminów:
  termin
  termin-seqtermin
  termin-seq,termin

Reguły C.2

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
  lista instrukcji
  statement-list openmp-directive

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

block-item:
  deklaracja
  wypowiedź
  openmp-directive

/* standardowe instrukcje */

oświadczenie:
  konstrukcja openmp

konstrukcja OpenMP
  parallelna konstrukcja
  konstrukcja for-construct
  konstrukcja sekcji
  pojedynczy konstrukt
  równoległa konstrukcja
  konstrukcja sekcji równoległych
  konstrukcja główna
  konstrukcja krytyczna
  konstrukcja atomowa
  struktura uporządkowana

openmp-directive:
  dyrektywa barierowa
  flush-dyrektywa

blok ustrukturyzowany:
  wypowiedź

konstrukcja równoległa:
  dyrektywa równoległa blok ustrukturyzowany

dyrektywa równoległa:
  # pragma omp parallel parallel-clauseoptseqnew-line

parallel-clause:
  unikalna-równoległa-klauzula
  data-klauzula

unikalna-równoległa-klauzula:
  if ( wyrażenie)
  num_threads ( wyrażenie)

dla konstrukcji:
  instrukcja iteracji dla dyrektywy for

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

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

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

typ-harmonogramu:
  static
  dynamic
  guided
  runtime

konstrukcja sekcji:
  sekcja-dyrektywa zakresu sekcji

sekcje-dyrektywy:
  # pragma omp sections sekcja-klauzulaoptseqnowa-linia

sekcje/klauzula:
  data-klauzula
  nowait

zakres sekcji:
  { sekwencja sekcji }

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

sekcja-dyrektywa:
  # pragma omp section nowy wiersz

jednoelementowy konstrukt:
  blok ustrukturyzowany z jedną dyrektywą

pojedyncza dyrektywa:
  # pragma omp single pojedyncza klauzulaoptseqnew-line

single-clause:
  data-klauzula
  nowait

równoległe do konstrukcji:
  dyrektywa parallel-for i instrukcja iteracji

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

parallel-for-clause:
  unikalna-równoległa-klauzula
  unique-for-clause
  data-klauzula

konstrukcja sekcji równoległych:
  dyrektywa sekcji równoległych - zakres sekcji

parallel-sections-directive:
  # pragma omp parallel sections parallel-sections-klauzulaoptseqnew-line

klauzula równoległych sekcji
  unikalna-równoległa-klauzula
  data-klauzula

główny wzór:
  ustrukturyzowany blok dyrektywy głównej

master-dyrektywa:
  # pragma omp master nowy wiersz

konstrukcja krytyczna:
  ustrukturyzowany blok dyrektywy krytycznej

krytyczna dyrektywa:
  # pragma omp critical fraza regionuwybieranienowa linia

wyrażenie regionu:
  (identyfikator)

dyrektywa-barierowa
  # pragma omp barrier nowy wiersz

konstrukcja atomowa:
  atomic-directive expression-statement

dyrektywa atomowa:
  # pragma omp atomic nowy wiersz

flush-directive:
  # pragma omp flush flush-varswybieranienowego wiersza

flush-vars:
  (lista zmiennych)

konstrukcja uporządkowana:
  blok ustrukturyzowany uporządkowanej dyrektywy

uporządkowana dyrektywa:
  # pragma omp ordered nowy wiersz

/* deklaracje standardowe */

deklaracja:
  dyrektywa threadprivate

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 ( operator redukcji:lista zmiennych)
  copyin ( lista zmiennych)

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

/* w C */

lista zmiennych:
  identyfikator
  lista zmiennych,identyfikator

/* w języku C++ */

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