Partager via


C. Grammaire OpenMP C et C++

C.1 Notation
C.2 Règles

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