Condividi tramite


Riepilogo della grammatica del preprocessore (C/C++)

Questo articolo descrive la grammatica formale del preprocessore C e C++. Descrive la sintassi delle direttive e degli operatori di pre-elaborazione. Per altre informazioni, vedere Direttive preprocessore e pragma e parole __pragma chiave e ._Pragma

Definizioni per il riepilogo della grammatica

I terminali sono endpoint in una definizione di sintassi. Non è possibile nessun'altra soluzione. I terminali includono il set di parole riservate e di identificatori definiti dall'utente.

I non terminali sono segnaposto nella sintassi. La maggior parte viene definita altrove in questo riepilogo della sintassi. Le definizioni possono essere ricorsive. I seguenti non determinili sono definiti nella sezione Convenzioni lessicali di Riferimenti al linguaggio C++:

constant, constant-expression, identifier, keyword, operatorpunctuator

Un componente facoltativo viene indicato da opt con indice. Ad esempio, la sintassi seguente indica un'espressione facoltativa racchiusa tra parentesi graffe:

{expressionoptare }

Convenzioni dei documenti

Le convenzioni utilizzano gli attributi del tipo di carattere differenti per i diversi componenti della sintassi. I simboli e i caratteri sono i seguenti:

Attributo Descrizione
nonterminal Il tipo corsivo indica non terminali.
#include I terminali in grassetto sono parole riservate letterali e simboli che devono essere inseriti come indicato. I caratteri in questo contesto fanno sempre distinzione tra maiuscole e minuscole.
opt I non terminali seguiti da opt sono sempre facoltativi.
carattere tipografico predefinito I caratteri nel set descritto o elencato in questo carattere tipografico possono essere utilizzati come terminali nelle istruzioni.

Un punto (:) che segue un oggetto non deterministico introduce la relativa definizione. Le definizioni alternative sono elencate in righe separate.

Nei blocchi di sintassi del codice, questi simboli nel carattere tipografico predefinito hanno un significato speciale:

Simbolo Descrizione
[ ] Le parentesi quadre racchiudono un elemento facoltativo.
{ | } Le parentesi graffe racchiudono elementi alternativi, separati da barre verticali.
... Indica che il modello di elemento precedente può essere ripetuto.

Nei blocchi di sintassi del codice, le virgole (,), i punti (.), i punti (;), i due punti (:), le parentesi (( )), le virgolette doppie (") e le virgolette singole (') sono valori letterali.

Grammatica del preprocessore

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

constant-expression:
defined( identifier )
defined identifier
 qualsiasi altra espressione costante

conditional:
if-partelif-partsopt opt opt else-part 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 tra
0 1 2 3 4 5 6 7 8 9

token-string:
 Stringa di token

token:
keyword
identifier
constant
operator
punctuator

filename:
 Nome file del sistema operativo legale

path-spec:
 Percorso file valido

text:
 Qualsiasi sequenza di testo

Nota

I non determinili seguenti vengono espansi nella sezione Convenzioni lessicali di Riferimenti al linguaggio C++: constant, identifierconstant-expression, keyword, operator, e punctuator.

Vedi anche

Informazioni di riferimento sul preprocessore C/C++