Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule opisano formalną gramatykę preprocesora C i C++. Obejmuje on składnię dyrektyw i operatorów przetwarzania wstępnego. Aby uzyskać więcej informacji, zobacz Preprocesor i Pragma dyrektywy oraz __pragma słowa kluczowe i ._Pragma
Definicje dla podsumowania dotyczącego gramatyki
Terminale są punktami końcowymi w definicji składni. Nie jest możliwe żadne inne rozwiązanie. Terminale obejmują zestaw zastrzeżonych wyrazów i identyfikatorów zdefiniowanych przez użytkownika.
Symbole zastępcze w składni są symbolami zastępczymi. Większość z tych elementów jest definiowana w innym miejscu w tym podsumowaniu składni. Definicje mogą być rekursywne. Następujące wartości nieterminalne są zdefiniowane w sekcji Konwencje leksykalne w dokumentacji językowej języka C++:
constant, , constant-expression, identifier, keyword, , operatorpunctuator
Opcjonalny składnik jest wskazywany przez wyrażenie zgody na indeks dolny. Na przykład następująca składnia wskazuje opcjonalne wyrażenie ujęte w nawiasy klamrowe:
{expressionZdecydować }
Konwencje dokumentów
Konwencje używają różnych atrybutów czcionki dla różnych składników składni. Symbole i czcionki są następujące:
| Atrybut | opis |
|---|---|
nonterminal |
Typ kursywy wskazuje nieterminalne. |
#include |
Terminale w typie pogrubienia to zastrzeżone wyrazy i symbole, które należy wprowadzić, jak pokazano. Znaki w tym kontekście są zawsze uwzględniane wielkości liter. |
| Zdecydować | Nieterminalne, po których następuje wyrażenie zgody , są zawsze opcjonalne. |
| domyślny typface | Znaki w zestawie opisanym lub wymienionym w tym typface mogą być używane jako terminale w instrukcjach. |
Dwukropek (:) po nieterminalnym wprowadza jego definicję. Definicje alternatywne są wyświetlane w oddzielnych wierszach.
W blokach składni kodu te symbole w domyślnym kroju typów mają specjalne znaczenie:
| Symbol | opis |
|---|---|
| [ ] | Nawiasy kwadratowe otaczają opcjonalny element. |
| { | } | Nawiasy klamrowe otaczają elementy alternatywne oddzielone pionowymi słupkami. |
| ... | Wskazuje, że poprzedni wzorzec elementu można powtórzyć. |
W blokach składni kodu przecinki (,), kropki (.), średniki (;), dwukropki (:), nawiasy (( )), cudzysłowy (), cudzysłowy ("') i cudzysłowy () są literałami.
Gramatyka preprocesora
control-line:
#defineidentifier token-stringZdecydować
#defineidentifier ( identifieropt , ... , identifieropt opt opt ) token-string
#include "path-spec"
#include <path-spec>
#linedigit-sequence "filename"Zdecydować
#undef identifier
#error token-string
#pragma token-string
constant-expression:
defined( identifier )
defined identifier
dowolne inne wyrażenie stałe
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: jeden z
0 1 2 3 4 5 6 7 8 9
token-string:
Ciąg token
token:
keyword
identifier
constant
operator
punctuator
filename:
Legalna nazwa pliku systemu operacyjnego
path-spec:
Ścieżka pliku prawnego
text:
Dowolna sekwencja tekstu
Uwaga
Poniższe wartości nieterminalne są rozszerzane w sekcji Konwencje leksykalne w dokumentacji językowej języka C++: constant, , constant-expressionidentifier, keyword, operatori punctuator.