Проще объяснение.
И, вы знаете, многие компиляторы имеют процесс лексического анализа, где исходный код разделен на токены.
Этот исходный код:
void main()
{
int x = -3 - -5;
printf("Hello World");
} // void main()
ли превратить во что-то похожее на это:
+--------------+------------------+
| TOKEN | TEXT |
+--------------+------------------+
| void | "void" |
+--------------+------------------+
| identifier | "main" |
+--------------+------------------+
| leftcurly | "{" |
+--------------+------------------+
| identifier | "int" |
+--------------+------------------+
| identifier | "x" |
+--------------+------------------+
| assign | "=" |
+--------------+------------------+
| minus | "-" |
+--------------+------------------+
| integer | "3" |
+--------------+------------------+
| minus | "-" |
+--------------+------------------+
| minus | "-" |
+--------------+------------------+
| integer | "5" |
+--------------+------------------+
| semicolon | ";" |
+--------------+------------------+
| identifier | "printf" |
+--------------+------------------+
| leftpar | "(" |
+--------------+------------------+
| string | "Hello World" |
+--------------+------------------+
| rightpar | ")" |
+--------------+------------------+
| semicolon | ";" |
+--------------+------------------+
| rightcurly | "}" |
+--------------+------------------+
| comment | "// void main()" |
+--------------+------------------+
Каждая из этих частей текста под названием "жетоны", имеют смысл.
Иногда, в других частях процесса компиляции, маркеры могут быть заменены на anothers лексем:
+--------------+------------------+
| TOKEN | TEXT |
+--------------+------------------+
| void | "void" |
+--------------+------------------+
| functiondec | "main" |
+--------------+------------------+
| leftcurly | "{" |
+--------------+------------------+
| type | "int" |
+--------------+------------------+
| variabledec | "x" |
+--------------+------------------+
| assign | "=" |
+--------------+------------------+
| negative | "-" |
+--------------+------------------+
| integer | "3" |
+--------------+------------------+
| substract | "-" |
+--------------+------------------+
| negative | "-" |
+--------------+------------------+
| integer | "5" |
+--------------+------------------+
| semicolon | ";" |
+--------------+------------------+
| functioncall | "printf" |
+--------------+------------------+
| leftpar | "(" |
+--------------+------------------+
| string | "Hello World" |
+--------------+------------------+
| rightpar | ")" |
+--------------+------------------+
| semicolon | ";" |
+--------------+------------------+
| rightcurly | "}" |
+--------------+------------------+
| comment | "// void main()" |
+--------------+------------------+
Переход от "минус" знак, чтобы, как «отрицательный sign token ", &" токен подделки ", является очень хорошим примером этого« токена препроцесса »для« финального токена ».
Это очень концептуальное объяснение. Вы можете прочитать более подробную техническую информацию о своей конкретной документации компилятора.
Cheers
Спасибо за это. Я бы ожидал некоторых примеров препроцессора, но это тоже здорово. – unj2