Используя " Принципы, методы и инструменты компиляторов, 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
и т. Д.
Другой способ подумать о взаимосвязи между ними состоит в том, что токен - это программная структура, используемая анализатором, которая имеет свойство, называемое лексемой, которое содержит символ / символы из ввода. Теперь, если вы посмотрите на большинство определений токена в коде, вы можете не увидеть лексему как одно из свойств токена. Это связано с тем, что токен, скорее всего, будет содержать начальную и конечную позицию символов / символов, которые представляют токен и лексему, последовательность символов / символов может быть получена из начальной и конечной позиции по мере необходимости, поскольку входной сигнал является статическим.
an individual entry in the lexicon
can you please explain by taking simple input at parser stage and when does parser asks for tokens from lexer.
SO не является дискуссионным сайтом. Это новый вопрос, и его нужно задавать как новый.Когда исходная программа загружается в лексический анализатор, она начинается с разбиения символов на последовательности лексем. Затем лексемы используются при построении токенов, в которых лексемы отображаются в токены. Переменная с именем myVar будет отображаться в токен с указанием < id , "num">, где "num" должно указывать на расположение переменной в таблице символов.
Вкратце поставил:
Пример включает:
x = a + b * 2,
что дает лексемы: {x, =, a, +, b, *, 2}
с соответствующими токенами: {< id , 0>, <=>, < id , 1 >, <+>, < id , 2>, <*>, < id , 3>}
источник
а) Токены - это символические имена сущностей, составляющих текст программы; например, if для ключевого слова if и id для любого идентификатора. Они составляют результат работы лексического анализатора. 5
(b) Шаблон - это правило, определяющее, когда последовательность символов из ввода составляет токен; например, последовательность i, f для токена if и любая буквенно-цифровая последовательность, начинающаяся с буквы для идентификатора токена.
(c) лексема - это последовательность символов из входных данных, которые соответствуют шаблону (и, следовательно, составляют экземпляр токена); например, if соответствует шаблону для if, а foo123bar соответствует шаблону для id.
источник
LEXEME - Последовательность символов, соответствующих ШАБЛОНУ, образующему ЖЕТОН
ШАБЛОН - набор правил, определяющих ТОКЕН
ТОКЕН - значащий набор символов над набором символов языка программирования, например: ID, Константа, Ключевые слова, Операторы, Пунктуация, Литеральная строка.
источник
Лексема - лексема - это последовательность символов в исходной программе, которая соответствует шаблону для токена и идентифицируется лексическим анализатором как экземпляр этого токена.
Токен - токен - это пара, состоящая из имени токена и необязательного значения токена. Имя токена - это категория лексической единицы.
Рассмотрим это выражение на языке программирования C:
сумма = 3 + 2;
Токенизированы и представлены в следующей таблице:
источник
Посмотрим, как работает лексический анализатор (он же Сканер)
Возьмем пример выражения:
но не фактический результат.
СКАНЕР ПРОСТО ПОВТОРНО ИЩЕТ ЛЕКСЕМ В ТЕКСТЕ ИСТОЧНИКА ПРОГРАММЫ, ПОКА ВХОД ИСЧЁТ
Лексема - это подстрока ввода, которая образует допустимую строку терминалов, присутствующую в грамматике. Каждая лексема следует шаблону, который объясняется в конце (часть, которую читатель может наконец пропустить)
(Важное правило - искать максимально длинный префикс, образующий допустимую строку терминалов, пока не встретится следующий пробел ... объяснено ниже)
ЛЕКСЕМЫ:
ЖЕТОНЫ: токены возвращаются по одному (Сканером по запросу Парсера) каждый раз, когда Сканер находит (действительную) лексему. Сканер создает, если еще не присутствует, запись в таблице символов (с атрибутами: в основном, категория-токен и несколько других) , когда он находит лексему, чтобы сгенерировать ее токен.
'#' обозначает запись в таблице символов. Я указал на номер лексемы в приведенном выше списке для простоты понимания, но технически это должен быть фактический индекс записи в таблице символов.
Следующие токены возвращаются сканером парсеру в указанном порядке для примера выше.
<идентификатор, # 1>
<Оператор, №2>
<Литерал, # 3>
<Оператор, №4>
<Литерал, # 5>
<Оператор, №4>
<Литерал, # 3>
<Пунктуатор, # 6>
Как видите разницу, токен - это пара, в отличие от лексемы, которая является подстрокой ввода.
И первый элемент пары - это токен-класс / категория.
Классы токенов перечислены ниже:
Общее количество возвращаемых токенов здесь равно 8, однако для лексем сделано только 6 записей в таблице символов. Лексем также всего 8 (см. Определение лексемы)
--- Вы можете пропустить эту часть
источник
Лексема - Лексема - это строка символов, которая является синтаксической единицей самого низкого уровня в языке программирования.
Токен - токен - это синтаксическая категория, которая формирует класс лексем, который означает, к какому классу принадлежит лексема, является ли это ключевым словом, идентификатором или чем-то еще. Одна из основных задач лексического анализатора - создать пару лексем и токенов, то есть собрать все символы.
Возьмем пример: -
Токен лексемы
Связь между лексемой и токеном
источник
Токен: тип (ключевые слова, идентификатор, знаки препинания, многосимвольные операторы) просто является токеном.
Pattern: Правило формирования токена из вводимых символов.
Лексема: это последовательность символов в ПРОГРАММЕ ИСТОЧНИКА, соответствующая шаблону для токена. По сути, это элемент Token.
источник
Токен: токен - это последовательность символов, которую можно рассматривать как единый логический объект. Типичными токенами являются:
1) идентификаторы
2) ключевые слова
3) операторы
4) специальные символы
5) константы.
Шаблон: набор строк на входе, для которых такой же токен создается в качестве вывода. Этот набор строк описывается правилом, называемым шаблоном, связанным с токеном.
Лексема: лексема - это последовательность символов в исходной программе, которая соответствует образцу токена.
источник
Лексема Лексемами называется последовательность символов (буквенно-цифровых) в токене.
Токен Токен - это последовательность символов, которую можно идентифицировать как единый логический объект. Обычно токенами являются ключевые слова, идентификаторы, константы, строки, знаки препинания, операторы. числа.
Шаблон Набор строк, описываемых правилом, называемым шаблоном. Шаблон объясняет, что может быть токеном, и эти шаблоны определяются с помощью регулярных выражений, связанных с токеном.
источник
Исследователи CS, как и математики, любят создавать «новые» термины. Все ответы выше хороши, но, очевидно, нет такой большой необходимости различать токены и лексемы, ИМХО. Они похожи на два способа представить одно и то же. Лексема конкретна - здесь набор символов; лексема, с другой стороны, абстрактна - обычно относится к типу лексемы вместе с ее семантическим значением, если это имеет смысл. Всего два цента.
источник
Lexical Analyzer берет последовательность символов, определяет лексему, которая соответствует регулярному выражению, и затем классифицирует ее как токен. Таким образом, лексема - это соответствующая строка, а имя токена - это категория этой лексемы.
Например, рассмотрим ниже регулярное выражение для идентификатора с вводом «int foo, bar;»
буква (буква | цифра | _) *
Здесь
foo
иbar
соответствует регулярному выражению, таким образом, обе лексемы, но классифицируются как один токен,ID
то есть идентификатор.Также обратите внимание, что следующая фаза, то есть синтаксический анализатор, должна знать не лексему, а токен.
источник
Lexeme - это, по сути, единица токена, и это в основном последовательность символов, которая соответствует токену и помогает разбить исходный код на токены.
Например: Если источник
x=b
, то лексема будетx
,=
,b
и жетоны бы<id, 0>
,<=>
,<id, 1>
.источник