Используя " Принципы, методы и инструменты компиляторов, 2-е изд. " (WorldCat) Ахо, Лам, Сетхи и Уллман, также известная как Книга Пурпурного Дракона ,
Лексема стр. 111
Лексема - это последовательность символов в исходной программе, которая соответствует шаблону для токена и идентифицируется лексическим анализатором как экземпляр этого токена.
Жетон стр. 111
Токен - это пара, состоящая из имени токена и необязательного значения атрибута. Имя токена - это абстрактный символ, представляющий своего рода лексическую единицу, например, конкретное ключевое слово или последовательность входных символов, обозначающих идентификатор. Имена токенов - это входные символы, которые обрабатывает анализатор.
Выкройка стр. 111
Шаблон - это описание формы, которую могут принимать лексемы токена. В случае ключевого слова как лексемы шаблон - это просто последовательность символов, образующих ключевое слово. Для идентификаторов и некоторых других токенов шаблон представляет собой более сложную структуру, которой соответствует множество строк.
Рисунок 3.2: Примеры токенов стр.112
[Token] [Informal Description] [Sample Lexemes]
if characters i, f if
else characters e, l, s, e else
comparison < or > or <= or >= or == or != <=, !=
id letter followed by letters and digits pi, score, D2
number any numeric constant 3.14159, 0, 6.02e23
literal anything but ", surrounded by "'s "core dumped"
Чтобы лучше понять эту связь с лексером и синтаксическим анализатором, мы начнем с синтаксического анализатора и вернемся ко входу.
Чтобы упростить разработку синтаксического анализатора, синтаксический анализатор не работает с вводом напрямую, а принимает список токенов, сгенерированный лексером. Глядя на колонке маркера на рисунке 3.2 мы видим маркеры , такие как if
, else
, comparison
, id
, number
и literal
; это названия токенов. Обычно в лексере / парсере токен представляет собой структуру, которая содержит не только имя токена, но и символы / символы, составляющие токен, а также начальную и конечную позицию строки символов, составляющих токен, с начальная и конечная позиции, используемые для сообщения об ошибках, выделения и т. д.
Теперь лексер принимает вводимые символы / символы и, используя правила лексера, преобразует введенные символы / символы в токены. Теперь у людей, которые работают с лексером / парсером, есть свои слова для того, что они часто используют. То, что вы думаете о последовательности символов / символов, составляющих токен, люди, использующие лексеры / парсеры, называют лексемой. Поэтому, когда вы видите лексему, просто подумайте о последовательности символов / символов, представляющих токен. В сравнительном примере последовательность знаков / символов может представлять собой различные шаблоны, такие как <
или >
или else
или 3.14
и т. Д.
Другой способ подумать о взаимосвязи между ними состоит в том, что токен - это программная структура, используемая анализатором, которая имеет свойство, называемое лексемой, которое содержит символ / символы из ввода. Теперь, если вы посмотрите на большинство определений токена в коде, вы можете не увидеть лексему как одно из свойств токена. Это связано с тем, что токен, скорее всего, будет содержать начальную и конечную позицию символов / символов, которые представляют токен и лексему, последовательность символов / символов может быть получена из начальной и конечной позиции по мере необходимости, поскольку входной сигнал является статическим.