Compartir a través de


Resumen de la gramática del preprocesador (C/C++)

En este artículo se describe la gramática formal del preprocesador de C y C++. Abarca la sintaxis de las directivas y operadores de preprocesamiento. Para obtener más información, consulte Directivas preprocesador y Pragma y las palabras clave __pragma y _Pragma.

Definiciones del resumen de la gramática

Los elementos terminales son puntos de conexión en una definición de sintaxis. No hay ninguna otra posible resolución. Los elementos terminales incluyen el conjunto de palabras reservadas e identificadores definidos por el usuario.

Los elementos no terminales son marcadores en la sintaxis. La mayoría se definen en otro lugar en este resumen de la sintaxis. Las definiciones pueden ser recursivas. Los siguientes elementos no terminales se definen en la sección de Convenciones léxicas de la Referencia del lenguaje C++:

constant, constant-expression, identifier, keyword, , operator, punctuator

Un componente opcional se indica mediante el subíndice opt. Por ejemplo, la siguiente sintaxis indica una expresión opcional delimitada por llaves:

{optexpression }

Convenciones de documentos

Las convenciones utilizan distintos atributos de fuente de diferentes componentes de la sintaxis. Los símbolos y fuentes son los siguientes:

Atributo Descripción
nonterminal La cursiva indica elementos no terminales.
#include Los elementos terminales en negrita son símbolos y palabras literales reservadas que deben especificarse tal como aparecen. Los caracteres en este contexto siempre distinguen entre mayúsculas y minúsculas.
opt Los elementos no terminales seguidos de opt son siempre opcionales.
tipo de letra predeterminado Los caracteres del juego descrito o mostrado en este tipo de letra se pueden usar como elementos terminales en las instrucciones.

Un signo de dos puntos ( : ) a continuación de un no terminal presenta su definición. Las definiciones alternativas se indican en líneas distintas.

En los bloques de sintaxis de código, estos símbolos en el tipo de letra predeterminado tienen un significado especial:

Símbolo Descripción
[ ] Los corchetes rodean un elemento opcional.
{ | } Las llaves rodean elementos alternativos, separados por barras verticales.
... Indica que se puede repetir el patrón de elemento anterior.

En bloques de sintaxis de código, comas (,), puntos (.), punto y coma (;), dos puntos (:), paréntesis (( )), comillas dobles (") y comillas simples (') son literales.

Gramática de preprocesador

control-line:
#define identifier token-stringopt
#defineidentifier ( identifieropt , ... , identifieropt ) token-stringopt
#include "path-spec"
#include <path-spec>
#line digit-sequence "filename"opt
#undef identifier
#error token-string
#pragma token-string

constant-expression:
defined( identifier )
defined identifier
 cualquier otra expresión constante

conditional:
if-part elif-partsopt else-partopt endif-line

if-part:
if-line text

if-line:
#if constant-expression
#ifdef identifier
#ifndef identifier

elif-parts:
elif-line text
elif-parts elif-line text

elif-line:
#elif constant-expression

else-part:
else-line text

else-line:
#else

endif-line:
#endif

digit-sequence:
digit
digit-sequence digit

digit: uno de
0 1 2 3 4 5 6 7 8 9

token-string:
 Cadena de token

token:
keyword
identifier
constant
operator
punctuator

filename:
 Nombre de archivo del sistema operativo legal

path-spec:
 Ruta de acceso válida

text:
 Cualquier secuencia de texto

Nota:

Los siguientes elementos no terminales se expanden en la sección de Convenciones léxicas de la Referencia del lenguaje C++: constant, constant-expression, identifier, keyword, operator y punctuator.

Consulte también

Referencia del preprocesador de C/C++