Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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.