C. Grammaire OpenMP C et C++
C.1 Notation
Les règles de grammaire se composent du nom pour un non-terminal, suivi d’un signe deux-points, suivi d’alternatives de remplacement sur des lignes distinctes.
L’expression syntaxique termopt indique que le terme est facultatif dans le remplacement.
L’expression syntaxique termoptseq équivaut à term-seqopt avec les règles supplémentaires suivantes :
term-seq :
term
term-seq term
term-seq ,
term
C.2 Règles
La notation est décrite dans la section 6.1 de la norme C. Cette annexe de la grammaire montre les extensions de la grammaire du langage de base pour les directives OpenMP C et C++.
/* en C++ (ISO/IEC 14882:1998) */
séquence-instructions :
instruction
directive-openmp
instruction séquence-instructions
directive-openmp séquence-instructions
/* en C90 (ISO/IEC 9899:1990) */
statement-list:
instruction
directive-openmp
statement-list statement
directive-openmp liste-instructions
/* en C99 (ISO/IEC 9899:1999) */
élément-bloc :
declaration
instruction
directive-openmp
/* instructions standard */
instruction :
construction-openmp
construction-openmp :
construction-parallèle
construction-for
construction-sections
construction-unique
construction-for-parallèle
construction-sections-parallèle
construction-maître
construction-critique
construction-atomique
construction-ordonnée
directive-openmp :
directive-cloisonnement
directive-vidage
bloc-structuré :
instruction
construction-parallèle :
directive-parallèle bloc-structuré
directive-parallèle :
# pragma omp parallel
clause-parallèleoptseq nouvelle-ligne
clause-parallèle :
clause-parallèle-unique
clause-données
clause-parallèle-unique :
if (
expression )
num_threads (
expression )
construction-for :
directive-for instruction-itération
directive-for :
# pragma omp for
clause-foroptseq nouvelle-ligne
clause-for :
clause-for-unique
clause-données
nowait
clause-for-unique :
ordered
schedule (
type-planification )
schedule (
type-planification ,
expression )
type-planification :
static
dynamic
guided
runtime
construction sections :
étendue-section directive-sections
directive-sections :
# pragma omp sections
clause-sectionsoptseq nouvelle-ligne
clause-sections :
clause-données
nowait
étendue-section :
{ séquence-section }
séquence-section :
directive-sectionopt bloc-structuré
séquence-section directive-section bloc-structuré
directive-section :
# pragma omp section
nouvelle-ligne
construction-unique :
directive-unique bloc-structuré
directive-unique :
# pragma omp single
clause-uniqueoptseq nouvelle-ligne
clause-unique :
clause-données
nowait
construction-parallèle-for :
directive-for-parallèle instruction-itération
directive-for-parallèle :
# pragma omp parallel for
clause-for-parallèleoptseq nouvelle-ligne
clause-for-parallèle :
clause-parallèle-unique
clause-for-unique
clause-données
construction-sections-parallèles :
directive-sections-parallèles étendue-section
directive-sections-parallèles :
# pragma omp parallel sections
clause-sections-parallèlesoptseq nouvelle-ligne
clause-sections-parallèles :
clause-parallèle-unique
clause-données
construction-maître :
directive-maître bloc-structuré
directive-maître :
# pragma omp master
nouvelle-ligne
construction-critique :
directive-critique bloc-structuré
directive-critique :
# pragma omp critical
expression-régionopt nouvelle-ligne
expression-région :
(identificateur)
directive-cloisonnement :
# pragma omp barrier
nouvelle-ligne
construction-atomique :
directive-atomique instruction-expression
directive-atomique :
# pragma omp atomic
nouvelle-ligne
directive-vidage :
# pragma omp flush
variables-vidageopt nouvelle-ligne
variables-vidage :
(liste-variables)
construction-ordonnée :
directive-ordonnée bloc-structuré
directive-ordonnée :
# pragma omp ordered
nouvelle-ligne
/* déclarations standard */
declaration :
directive-threadprivate
directive-threadprivate :
# pragma omp threadprivate (
liste-variables )
nouvelle-ligne
clause-données :
private (
liste-variables )
copyprivate (
liste-variables )
firstprivate (
liste-variables )
lastprivate (
liste-variables )
shared (
liste-variables )
default ( shared )
default ( none )
reduction (
opérateur-réduction :
liste-variables )
copyin (
liste-variables )
opérateur-réduction :
Un des éléments suivants : + \* - & ^ | && ||
/* en C */
liste-variables :
identifier
liste-variables ,
identificateur
/* en C++ */
liste-variables :
expression-id
liste-variables ,
expression-id