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