Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento článek popisuje formální gramatiku preprocesoru jazyka C a C++. Zahrnuje syntaxi direktiv a operátorů předběžného zpracování. Další informace naleznete v tématu Preprocessor a Direktivy Pragma a __pragma klíčová slova._Pragma
Definice shrnutí gramatiky
Terminály jsou koncové body v definici syntaxe. Žádné jiné řešení není možné. Terminály obsahují sadu vyhrazených slov a uživatelské identifikátory.
Neterminály jsou zástupné symboly v syntaxi. Většina je definována jinde v tomto souhrnu syntaxe. Definice mohou být rekurzivní. Následující neterminaly jsou definovány v části Lexikální konvence referenční dokumentace jazyka C++:
constant, constant-expression, identifier, keyword, , operatorpunctuator
Volitelná komponenta je označená dolním indexem. Například následující syntaxe označuje volitelný výraz uzavřený ve složených závorkách:
{expressionvolit }
Konvence dokumentů
Úmluvy používají odlišné atributy písma pro různé součásti syntaxe. Symboly a písma jsou následující:
| Atribut | Popis |
|---|---|
nonterminal |
Kurzíva označuje neterminály. |
#include |
Terminály tučného typu jsou slova a symboly vyhrazená literály, které je nutné zadat tak, jak je znázorněno. Znaky v tomto kontextu vždy rozlišují velká a malá písmena. |
| volit | Neterminaly následované výslovným souhlasem jsou vždy volitelné. |
| výchozí písmo | Znaky ze sady, které jsou popsány nebo uvedeny v tomto písmu, lze použít jako terminály v příkazech. |
Dvojtečka (:) po netermiálním objektu zavádí jeho definici. Alternativní definice jsou uvedeny na samostatných řádcích.
V blocích syntaxe kódu mají tyto symboly výchozího písma zvláštní význam:
| Symbol | Popis |
|---|---|
| [ ] | Hranaté závorky obklopují volitelný prvek. |
| { | } | Složené závorky obklopují alternativní prvky oddělené svislými pruhy. |
| ... | Označuje, že předchozí vzor prvku lze opakovat. |
V blocích syntaxe kódu jsou literály čárky (,), tečky (.), středníky (;), dvojtečky (:), závorky (( )), dvojité uvozovky (") a jednoduché uvozovky (').
Gramatika preprocesoru
control-line:
#defineidentifier token-stringvolit
#defineidentifier ( identifieropt , ... , identifieropt opt ) token-string
#include "path-spec"
#include <path-spec>
#linedigit-sequence "filename"volit
#undef identifier
#error token-string
#pragma token-string
constant-expression:
defined( identifier )
defined identifier
jakýkoli jiný konstantní výraz
conditional:
if-partelif-partsopt 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:
Řetězec token
token:
keyword
identifier
constant
operator
punctuator
filename:
Název souboru právního operačního systému
path-spec:
Cesta k souboru z právních předpisů
text:
Libovolná posloupnost textu
Poznámka:
Následující neterminaly jsou rozšířeny v části Lexikální konvence jazyka C++:constant , , constant-expression, identifierkeyword, operatora punctuator.