В построении компилятора это символ такой же, как токен?

В построении компилятора, когда вы говорите о токенах, это токен тот же, что и символ/просто еще один термин для символа? После некоторых исследований, я думаю, чтобы понять, что токен - это символ со ссылкой на таблицу символов, поэтому какой-то атрибутный символ/символ с некоторой дополнительной информацией? Спасибо за любое уточнение: -)

Ответ 1

Токен не обязательно является символом в таблице символов. Например, если токен является зарезервированным словом, он не вводится в таблицу символов. Если токен является идентификатором, он скорее всего будет введен в таблицу символов.

Возьмем, например, следующее объявление:

char s[100];

Лексический анализатор может выводить следующие токены:

<"char", IDENTIFIER>

в зависимости от реализации он может быть распознан как зарезервированное слово или введен в таблицу символов в качестве предопределенного имени типа (я не уверен на 100% здесь),

<"s", IDENTIFIER>

"s" вводится в таблицу символов как идентификатор переменной,

<"[", OPEN_SQUARE_BRACKET>

не вводится в таблицу символов,

<"100", INTEGER_LITERAL>

не вводится в таблицу символов,

<"]", CLOSE_SQUARE_BRACKET>

не вводится в таблицу символов,

<";", SEMI_COLON>

не вводится в таблицу символов.

Итак, вы в основном вставляете в таблицу символов только те токены, которые вам нужно ссылаться позже во время процесса компиляции. Например, позже в теле функции, когда вы находите

strcpy(s, "Hello, world\n");

вы снова узнаете токен < "s" , IDENTIFIER > и просмотрите его в таблице символов. В таблице символов будет указано, что "s" объявлено как переменная типа char [].

Итак, я бы сказал, что токен - это любой фрагмент ввода, который распознается лексическим анализатором, и что только определенные токены со специальным значением вводятся как символы в таблице символов.

Ответ 2

Символ - это константа GIVEN IN THAT KEY, как в S = S в этой таблице, или Pi = Pi в этом уравнении, тогда как токен представляет заданный как среду обмена в этом состоянии.