Compartir a través de


C. Gramática de OpenMP C y C++

C.1 Notación
C.2 Reglas

C.1 Notación

Las reglas gramaticales constan del nombre de un no terminal, seguido de dos puntos, seguidos de alternativas de reemplazo en líneas independientes.

El término de expresión sintáctica opt indica que el término es opcional dentro del reemplazo.

El término de expresión sintáctica optseq equivale a term-seqopt con las siguientes reglas adicionales:

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

C.2 Reglas

La notación se describe en la sección 6.1 del estándar de C. En este apéndice de gramática se muestran las extensiones de la gramática del lenguaje base para las directivas de C y C++ de OpenMP.

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

statement-seq:
instrucción
openmp-directive
statement-seq statement
statement-seq openmp-directive

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

statement-list:
instrucción
openmp-directive
statement-list statement
statement-list openmp-directive

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

block-item:
declaration
instrucción
openmp-directive

/* standard statements */

instrucción:
openmp-construct

openmp-construct:
parallel-construct
for-construct
sections-construct
single-construct
parallel-for-construct
parallel-sections-construct
master-construct
critical-construct
atomic-construct
ordered-construct

openmp-directive:
barrier-directive
flush-directive

structured-block:
instrucción

parallel-construct:
parallel-directive structured-block

parallel-directive:
# pragma omp parallel parallel-clauseoptseq new-line

parallel-clause:
unique-parallel-clause
data-clause

unique-parallel-clause:
if ( expression )
num_threads ( expression )

for-construct:
for-directive iteration-statement

for-directive:
# pragma omp for for-clauseoptseq new-line

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

unique-for-clause:
ordered
schedule ( schedule-kind )
schedule ( schedule-kind , expression )

schedule-kind:
static
dynamic
guided
runtime

sections-construct:
sections-directive section-scope

sections-directive:
# pragma omp sections sections-clauseoptseq new-line

sections-clause:
data-clause
nowait

section-scope:
{ section-sequence }

section-sequence:
section-directiveopt structured-block
section-sequence section-directive structured-block

section-directive:
# pragma omp section new-line

single-construct:
single-directive structured-block

single-directive:
# pragma omp single single-clauseoptseq new-line

single-clause:
data-clause
nowait

parallel-for-construct:
parallel-for-directive iteration-statement

parallel-for-directive:
# pragma omp parallel for parallel-for-clauseoptseq new-line

parallel-for-clause:
unique-parallel-clause
unique-for-clause
data-clause

parallel-sections-construct:
parallel-sections-directive section-scope

parallel-sections-directive:
# pragma omp parallel sections parallel-sections-clauseoptseq new-line

parallel-sections-clause:
unique-parallel-clause
data-clause

master-construct:
master-directive structured-block

master-directive:
# pragma omp master new-line

critical-construct:
critical-directive structured-block

critical-directive:
# pragma omp critical region-phraseopt new-line

region-phrase:
(identifier)

barrier-directive:
# pragma omp barrier new-line

atomic-construct:
atomic-directive expression-statement

atomic-directive:
# pragma omp atomic new-line

flush-directive:
# pragma omp flush flush-varsopt new-line

flush-vars:
(variable-list)

ordered-construct:
ordered-directive structured-block

ordered-directive:
# pragma omp ordered new-line

/* standard declarations */

declaration:
threadprivate-directive

threadprivate-directive:
# pragma omp threadprivate ( variable-list ) new-line

data-clause:
private ( variable-list )
copyprivate ( variable-list )
firstprivate ( variable-list )
lastprivate ( variable-list )
shared ( variable-list )
default ( shared )
default ( none )
reduction ( reduction-operator : variable-list )
copyin ( variable-list )

reduction-operator:
 Uno de: + \* - & ^ | && ||

/* in C */

variable-list:
identifier
variable-list , identifier

/* in C++ */

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