Подтвердить что ты не робот

В чем разница между токеном и лексемой?

В построении компилятора Aho Ullman и Sethi указано, что входная строка символов исходной программы разделена на последовательность символов, которые имеют логический смысл и известны как токены и лексемы, являются последовательностями, которые составляют токен, в чем же основное отличие?

4b9b3361

Ответ 1

Использование Принципы, методы и инструменты компиляторов, 2-е изд. " (WorldCat) от Aho, Lam, Sethi и Ullman, AKA Purple Book,

Lexeme pg. 111

Лексем - это последовательность символов в исходной программе, которая соответствует шаблону для токена и идентифицируется лексическим анализатор как экземпляр этого токена.

Token pg. 111

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

Шаблон стр. 111

Образец - это описание формы, в которой лексемы токена могут брать. В случае ключевого слова в качестве токена шаблон является последовательность символов, которые образуют ключевое слово. Для идентификаторов и некоторых другие жетоны, шаблон является более сложной структурой, которая сопоставляется много строк.

Рисунок 3.2: Примеры токенов pg.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 "       "core dumped"

Чтобы лучше понять это отношение к лексеру и синтаксическому анализатору, мы начнем с анализатора и вернемся к входу.

Чтобы упростить проектирование синтаксического анализатора, синтаксический анализатор не работает с вводом напрямую, а принимает список токенов, сгенерированных лексером. Глядя на столбец токенов на рисунке 3.2, мы видим токены, такие как if, else, comparison, id, number и literal; это имена токенов. Обычно с помощью lexer/parser токен представляет собой структуру, которая содержит не только имя токена, но и символы/символы, составляющие токен, и начальную и конечную позицию строки символов, составляющих токен, с начальное и конечное положение используются для сообщения об ошибках, выделения и т.д.

Теперь лексер берет ввод символов/символов, а использование правил лексера преобразует входные символы/символы в токены. Теперь у людей, которые работают с lexer/parser, есть свои слова для вещей, которые они часто используют. То, что вы думаете о последовательности символов/символов, составляющих токен, - это то, что люди, которые используют lexer/parsers, называют lexeme. Поэтому, когда вы видите лексему, просто подумайте о последовательности символов/символов, представляющих токен. В примере сравнения последовательность символов/символов может быть различными шаблонами, такими как < или > или else или 3.14 и т.д.

Другой способ думать о связи между ними состоит в том, что токен представляет собой структуру программирования, используемую парсером, которая имеет свойство, называемое lexeme, которое содержит символ/символы из ввода. Теперь, если вы посмотрите на большинство определений токена в коде, вы можете не видеть lexeme как одно из свойств токена. Это связано с тем, что токен, скорее всего, сохранит начальную и конечную позиции символов/символов, которые представляют токен и лексему, последовательность символов/символов может быть получена из начальной и конечной позиции по мере необходимости, поскольку вход является статическим.

Ответ 2

Когда исходная программа подается в лексический анализатор, она начинается с разбивки символов на последовательности лексем. Лексемы затем используются при построении жетонов, в которые лексемы отображаются в токены. Переменная, называемая myVar, будет отображаться в токен, обозначающий < id, "num" > , где "num" должен указывать на местоположение переменной в таблице символов.

Короче говоря:

  • Lexemes - это слова, полученные из потока ввода символов.
  • Токены - это лексемы, сопоставленные с именем маркера и значением атрибута.


Пример: x = a + b * 2
Что дает лексемы: {x, =, a, +, b, *, 2}
С соответствующими токенами: {< id, 0 > , <= > , < id, 1 > , < + > , < id, 2 > , < * > , < id, 3 > }

Ответ 3

a) Токены - это символические имена для сущностей, составляющих текст программы; например если для ключевого слова if и id для любого идентификатора. Они составляют лексический анализатор. 5

(b) Шаблон - это правило, которое указывает, когда последовательность символов из ввода представляет собой токен; например, последовательность i, f для токена if и любую последовательность alphanumerics, начиная с буквы для идентификатора маркера.

(c) Лексем - это последовательность символов из ввода, которая соответствует шаблону (и, следовательно, представляют собой экземпляр знака); например, если соответствует шаблону if, и foo123bar соответствует шаблону для id.

Ответ 4

Токен. Тип (ключевые слова, идентификатор, символ пунктуации, многосимвольные операторы) - это просто токен.

Образец: правило для формирования токена из входных символов.

Lexeme: его последовательность символов в SOURCE PROGRAM, соответствующая шаблону для токена.        В принципе, это элемент Token.

Ответ 5

Token: Token - это последовательность символов, которая может рассматриваться как единый логический объект. Типичные жетоны,
1) Идентификаторы
2) ключевые слова
3) операторы
4) специальные символы
5) константы

Шаблон: Набор строк на входе, для которых тот же токен создается как выход. Этот набор строк описывается правилом, называемым шаблоном, связанным с токеном.
Лексем: Лексема - это последовательность символов в исходной программе, которая соответствует шаблону для токена.

Ответ 6

LEXEME - Последовательность символов, совпадающих с PATTERN, образующими TOKEN

PATTERN. Набор правил, определяющих TOKEN

TOKEN. Значительная коллекция символов над набором символов языка программирования ex: ID, константа, ключевые слова, операторы, знаки препинания, литеральная строка

Ответ 7

Посмотрим на работу лексического анализатора (также называемого сканером)

Возьмем примерное выражение:

INPUT : cout << 3+2+3;

FORMATTING PERFORMED BY SCANNER :  {cout}|space|{<<}|space|{3}{+}{2}{+}{3}{;} 

не фактический вывод, хотя.

СКАНЕР ПРОСТО ПОСМОТРЕТЬ ДЛЯ ЛЕКСМЕНА В ТЕЧЕНИИ ИСТОЧНИКА-ПРОГРАММЫ, ЕСЛИ ВХОД НЕ ВЫИГРЫВАЕТСЯ

Lexeme - это подстрока ввода, которая формирует допустимые строки-терминалы, присутствующие в грамматике. Каждая лексема следует шаблону, который объясняется в конце (часть, которую читатель может пропустить, наконец)

(Важным правилом является поиск самого длинного префикса, формирующего действительную строку-терминалы, до тех пор, пока не будет встречено следующее пустое пространство... объяснено ниже)

LEXEMES:

  • соиЬ
  • < <

(хотя "<" также является правильной терминальной строкой, но вышеописанное правило должно выбрать шаблон для lexeme "<" для создания маркера, возвращаемого сканером).

  1. 3
  2. +
  3. 2
  4. ;

TOKENS: Токены возвращаются по одному (по Сканеру по запросу Parser) каждый раз, когда сканер находит (действительную) лексему. Сканер создает, если он еще не присутствует, запись в виде таблицы символов (с атрибутами: в основном категория токенов и несколько других), когда он находит лексему, чтобы генерировать его токен

'#' обозначает запись таблицы символов. Я указал на число лексем в приведенном выше списке для удобства понимания, но это технически должно быть фактическим индексом записи в таблице символов.

Следующие токены возвращаются сканером для парсера в указанном порядке для приведенного выше примера.

  • < идентификатор, # 1 >

  • < Оператор, # 2 >

  • < Literal, # 3 >

  • < Оператор, # 4 >

  • < Literal, # 5 >

  • < Оператор, # 4 >

  • < Literal, # 3 >

  • < Пунктуатор, № 6 >

Как вы можете видеть разницу, токен представляет собой пару в отличие от lexeme, которая является подстрокой ввода.

И первым элементом пары является токен-класс/категория

Классы токенов перечислены ниже:   

<я > KEYWORDS  <я > ИДЕНТИФИКАТОРЫ  <я > литералов  <я > знаки пунктуации  <я > ОПЕРАТОРЫ 

И еще одно: сканер обнаруживает пробелы, игнорирует их и не образует никакого символа для пробела вообще. Не все разделители - это пробелы, пробелы - одна из форм разделителя, используемая сканерами для этой цели. Вкладки, Newlines, Spaces, Escaped Characters во входном файле все вместе называются разделителями Whitespace. Немногие другие разделители - ';' ',' ':' и т.д., которые широко признаны как лексемы, которые образуют токен.

Общее количество возвращенных токенов здесь 8, однако для лексем сделано только 6 записей в таблице символов. Lexemes также составляют 8 (см. Определение lexeme)

--- Вы можете пропустить эту часть

A ***pattern*** is a rule ( say, a regular expression ) that is used to check if a string-of-terminals is valid or not.

If a substring of input composed only of grammar terminals is following the rule specified by any of the listed patterns , it is validated as a lexeme and selected pattern will identify the category of lexeme, else a lexical error is reported due to either (i) not following any of the rules or (ii) input consists of a bad terminal-character not present in grammar itself.

for example :

1. No Pattern Exists : In C++ , "99Id_Var" is grammar-supported string-of-terminals but is not recognised by any of patterns hence lexical error is reported .

2. Bad Input Character : $,@,unicode characters may not be supported as a valid character in few programming languages.`

Ответ 8

Lexeme. Лексем - это последовательность символов в исходной программе, которая соответствует шаблону для токена и идентифицируется лексическим анализатором как экземпляр этого токена.

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

  • идентификаторы: имена, которые программист выбирает
  • ключевые слова: имена уже на языке программирования
  • разделители (также называемые пунктуаторами): знаки пунктуации и парные разделители Операторы
  • : символы, которые работают с аргументами и производят результаты
  • литералы: числовые, логические, текстовые, справочные литералы

Рассмотрим это выражение на языке программирования C:

sum = 3 + 2;

Обозначается и отображается в следующей таблице:

 Lexeme        Token category
------------------------------
sum      |    Identifier
 =       |    Assignment operator
 3       |    Integer literal
 +       |    Addition operator
 2       |    Integer literal
 ;       |    End of statement

Ответ 9

Lexeme. Лексем - это строка символов, которая является синтаксической единицей самого низкого уровня на языке программирования.

Токен. Токен является синтаксической категорией, которая образует класс лексем, который означает, какой класс принадлежит лексеме, это ключевое слово или идентификатор или что-то еще. Одной из основных задач лексического анализатора является создание пары лексем и токенов, то есть для сбора всех символов.

Возьмем пример: -

if (y <= t)

у = у-3;

Lexeme & ensp; & ensp; & ensp; & ensp; & ensp; & ensp; & ensp; & ensp; & ensp; & ensp; & ensp; & ensp; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; Знак

if & ensp; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; СЛОВО

(& ensp; & ensp; & ensp; & ensp; & ensp; & ensp; & ensp; & ensp; & ensp; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; LEFT PARENTHESIS

y & ensp; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; IDENTIFIER

< = & ensp; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; СРАВНЕНИЕ

t & ensp; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; IDENTIFIER

) & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; ПРАВИЛЬНЫЙ ПАРАМЕТР

y & ensp; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; ИДЕНТИФИКАТОР

= & ensp; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; ОБСУЖДЕНИЕ

y & ensp; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; ИДЕНТИФИКАЦИЯ

_ & ensp; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; ARITHMATIC

3 & ensp; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; INTEGER

; & ensp; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; & EnSP; SEMICOLON

Связь между Lexeme и Token

Связь между лексемой и токеном

Ответ 10

Lexeme - это в основном единица токена, и это в основном последовательность символов, которая соответствует токену и помогает разбить исходный код на токены.

Например: если источником является x=b, то лексемы будут x, =, b, а токены будут <id, 0>, <=>, <id, 1>.