Compartilhar via


Resumo de gramática de pré-processador (C/C++)

Este artigo descreve a gramática formal do pré-processador C e C++. Cobre a sintaxe das diretivas e operadores de pré-processamento. Para mais informações, confira as Pré-processador e as Diretivas pragma e as palavras-chave __pragma e _Pragma.

Definições para o resumo de gramática

Os terminais são pontos de extremidade em uma definição de sintaxe. Nenhuma outra resolução é possível. Os terminais incluem o conjunto de palavras reservadas e identificadores definidos pelo usuário.

Os não terminais são espaços reservados na sintaxe. A maioria é definida em outra parte deste resumo da sintaxe. As definições podem ser recursivas. Os seguintes não terminais são definidos na seção Convenções lexicais da Referência de Linguagem C++:

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

Um componente opcional é indicado pelo opt subscrito. Por exemplo, a seguinte sintaxe indica uma expressão opcional incluída em chaves:

{ expressionopt }

Convenções de documento

As convenções usam atributos diferentes de fonte para componentes diferentes de sintaxe. Os símbolos e as fontes são os seguintes:

Atributo Descrição
nonterminal O tipo em itálico indica não terminais.
#include Os terminais de tipo em negrito são palavras reservadas a literais e símbolos que devem ser inseridos como mostrado. Os caracteres nesse contexto sempre diferenciam maiúsculas de minúsculas.
opt Não terminais seguidos por opt são sempre opcionais.
default typeface Os caracteres no conjunto descrito ou listados nesta face de tipos podem ser usados como terminais em instruções.

Um sinal de dois-pontos (:) depois de um não terminal introduz sua definição. As definições alternativas são listadas em linhas separadas.

Em blocos de sintaxe de código, esses símbolos no tipo padrão têm um significado especial:

Símbolo Descrição
[ ] Colchetes envolvem um elemento opcional.
{ | } Chaves envolvem elementos alternativos, separados por barras verticais.
... Indica que o padrão de elemento anterior pode ser repetido.

Em blocos de sintaxe de código, vírgula (,), ponto (.), ponto e vírgula (), dois-pontos (;:), parênteses (( )), aspas duplas (") e aspas simples (') são literais.

Gramática do pré-processador

control-line:
#define identifier token-stringopt
#defineidentifier ( identifieroptar... , identifier ,optar, token-string)optar
#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
 qualquer outra expressão 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: um de
0 1 2 3 4 5 6 7 8 9

token-string:
 Cadeia de caracteres de token

token:
keyword
identifier
constant
operator
punctuator

filename:
 Nome do arquivo do sistema operacional legal

path-spec:
 Caminho de arquivo válido

text:
 Qualquer sequência de texto

Observação

Os não terminais a seguir são expandidos na seção convenções lexicais da Referência de Linguagem C++: constant, constant-expression, identifier, keyword, operator e punctuator.

Confira também

Referência de pré-processador C/C++