C. OpenMP C- en C++-grammatica

Meer informatie over de grammaticaregels en syntaxisextensies in C en C++ voor OpenMP, een parallel programmeerframework.

C.1-notatie

De grammaticaregels bestaan uit de naam van een niet-terminal, gevolgd door een dubbele punt, en vervolgens vervangingsopties op afzonderlijke regels.

De syntactische expressie term opt geeft aan dat de term optioneel is binnen de vervanging.

De syntactische expressietermoptseq is gelijk aan term-seqopt met de volgende aanvullende regels:

term-seq:
  term
  term-seqterm
  term-seq,term

C.2-regels

De notatie wordt beschreven in sectie 6.1 van de C-standaard. Deze grammaticabijlage toont de extensies voor de basistaal grammatica voor de OpenMP C- en C++-instructies.

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

statement-seq:
  verklaring
  openmp-directive
  statement-seq-instructie
  statement-seq openmp-directive

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

verklaringenlijst:
  verklaring
  openmp-directive
  instructie statement-list
  statement-list openmp-directive

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

block-item:
  verklaring
  verklaring
  openmp-directive

/* standaardverklaringen */

verklaring:
  openmp-construct

openmp-construct:
  parallel-construct
  for-construct
  secties-construct
  single construct
  parallel-for-construct
  parallel-secties-constructie
  master-construct
  kritieke constructie
  atomic-construct
  geordende constructie

openmp-directive:
  barrière-richtlijn
  flush-directive

gestructureerd blok:
  verklaring

parallelle constructie:
  parallel-richtlijn gestructureerd-blok

parallelle richtlijn:
  # pragma omp parallel parallel-componentoptseqnew-line

parallel-clausule:
  unieke-parallelclausule
  data-clausule

unieke-parallelle-clausule
  if ( uitdrukking)
  num_threads ( uitdrukking)

for-construct:
  iteratie-instructie for-directive

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

for-clausule:
  unique-for-clause
  data-clausule
  nowait

unique-for-clause:
  ordered
  schedule ( planningstype)
  schedule ( planningstype,uitdrukking)

planningstype:
  static
  dynamic
  guided
  runtime

secties-opbouw
  secties-richtlijn sectie-scope

secties-richtlijn:
  # pragma omp sections sections-clauseoptseqnew-line

sectieclausule:
  data-clausule
  nowait

sectiebereik:
  { section-sequence }

sectiereeks:
  section-directiveoptstructured-block
  sectie-sequentie sectie-richtlijn gestructureerd-blok

sectierichtlijn:
  # pragma omp section nieuwe regel

één constructie:
  gestructureerd blok met één instructie

één richtlijn:
  # pragma omp single enkelvoudige clausuleoptseqnieuwe regel

enkelvoudige zin:
  data-clausule
  nowait

parallel-for-construct:
  iteratie-instructie parallel-for-directive

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

parallel-voor-clausule:
  unieke-parallelclausule
  unique-for-clause
  data-clausule

parallel-sections-construct
  parallel-secties-richtlijn secties-bereik

parallelsectiesrichtlijn:
  # pragma omp parallel sections parallel-sections-componentoptseqnew-line

parallel-sections-clausule:
  unieke-parallelclausule
  data-clausule

master-construct:
  meester-directive gestructureerd-blok

master-directive:
  # pragma omp master nieuwe regel

kritieke constructie:
  kritiek-richtlijn gestructureerd-blok

kritieke richtlijn:
  # pragma omp critical regio-uitdrukkingoptnew-line

regio-uitdrukking:
  (identificator)

barrière-richtlijn:
  # pragma omp barrier nieuwe regel

atomic-construct:
  atomic-directive expression-statement

atomic-directive:
  # pragma omp atomic nieuwe regel

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

flush-vars:
  (variabele-lijst)

geordende constructie:
  geordende richtlijn gestructureerd blok

opgelegde richtlijn
  # pragma omp ordered nieuwe regel

/* standaarddeclaraties */

declaratie:
  threadprivate-richtlijn

threadprivate-directive:
  # pragma omp threadprivate ( variabelenlijst)nieuwe regel

gegevensclausule:
  private ( variable-list)
  copyprivate ( variable-list)
  firstprivate ( variable-list)
  lastprivate ( variable-list)
  shared ( variable-list)
  default ( shared )
  default ( none )
  reduction ( reductieoperator:variabelenlijst)
  copyin ( variable-list)

reductieoperator:
 Een van de volgende: + \* - & ^ | && ||

/* in C */

variable-list:
  identificatie
  variable-list,identificator

/* in C++ */

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