Маркер не обязательно является символом в таблице символов.Например, если токен является зарезервированным словом, он не вводится в таблицу символов.Если токен является идентификатором, то он, вероятно, будет введен в таблицу символов.
Возьмем, к примеру, следующее объявление:
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 [].
Итак, я бы сказал, токен - это любой фрагмент ввода, который распознаетсялексический анализатор, и что только определенные токены со специальным значением вводятся как символы в таблице символов.