2. Lexical analysis — Python 3.13.2 documentation

2. Lexical analysis — Python 3.13.2 documentation
На чтение
10 мин.
Просмотров
38
Дата обновления
10.03.2025
#COURSE##INNER#

Лексический анализ – это первый шаг компиляции Python, отвечающий за превращение исходного кода в поток лексем, которые могут быть обработаны синтаксическим анализатором. Вызов tokenize.tokenize() с текстом программы в качестве аргумента возвращает генератор лексем.

Лексема – это атомарная единица текста программы. Каждая лексема представляет собой кортеж из типа токена, литерала токена и положения начала токена в исходном коде. Типы токенов перечислены в tokenize.tok_name, а литералы токенов содержат фактическое текстовое представление лексем.

Лексический анализ в Python 3.13.2

Токенизация: Разбивает исходный код на отдельные токены (например, ключевые слова, идентификаторы, операторы).

Лемматизация: Нормализует слова, сводя их к их базовой форме (леммам) для уменьшения количества дубликатов.

Стволлинг: Удаляет грамматические окончания, что еще больше снижает размер словаря и улучшает сопоставление с паттернами.

Минимизация слов: Создает словарь, в котором ключи - это нормализованные токены, а значения - их индикаторы присутствия.

Тегирование частей речи: Присваивает токенам их части речи (например, существительное, глагол), что помогает в понимании естественного языка.

Токенизация входных данных

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

Классификация токенов

Токены классифицируются на основе их синтаксической и семантической роли в программе Python:

Ключевые слова представляют собой зарезервированные слова, которые имеют специальное значение в языке Python (например, def, class, if).

Идентификаторы - это имена, присвоенные переменным, функциям и классам (например, my_variable, my_function).

Литералы представляют собой значения данных, такие как строки, числа и булевы значения (например, "hello", 10, True).

Операторы - это символы или ключевые слова, которые выполняют операции (например, +, -, *, **).

Разделители разделяют различные элементы кода (например, скобки, точки с запятой).

Комментарии - это аннотации в коде, которые игнорируются интерпретатором (например, # это комментарий).

Обработка литералов

  • Целые числа (например, 123, -45)
  • Числа с плавающей запятой (например, 3.14, -1.618)
  • Комплексные числа (например, 1+2j, 3-4j)
  • Строки (например, "Hello, world!", 'Python')
  • Поле булевых значений (например, True, False)
  • Экзотические литералы (например, None, Ellipsis)

Анализатор лексики преобразует литералы в токены и связывает их с соответствующими типами данных. Этот процесс важен для синтаксического анализа, поскольку типы данных определяют, какие операции и функции можно применять к литералам.

Обработка строк и идентификаторов

С помощью объекта лексического анализа можно идентифицировать строки и идентификаторы.

Строки могут быть заключены в кавычки (") или апострофы (').

Идентификаторы - это последовательности букв, цифр и символов подчёркивания (_), начинающиеся с буквы.

Механизмы лексического анализа

Механизм Описание
Токенизация Разбиение входного текста на токены (лексемы) на основе правил, определенных лексическим анализатором.
Типирование токенов Присвоение типа каждому токену (например, идентификатор, ключевое слово, оператор).
Обработка символьных констант Обработка входного текста, содержащего символьные константы (например, 'a', '123').
Обработка строковых констант Обработка входного текста, содержащего строковые константы (например, "Hello world").
Обработка комментариев Обработка и исключение комментариев из входного текста.

Вопрос-ответ:

Что такое лексический анализатор?

Лексический анализатор — это первый этап компиляции, который разбивает входной код на токены (лексемы), представляющие отдельные элементы языка программирования, такие как ключевые слова, идентификаторы, числа и операторы.

Как реализован лексический анализатор в Python?

В Python лексический анализатор реализован с помощью функции `tokenize`, которая возвращает итератор, генерирующий токены. Каждый токен представлен кортежем из типа токена, значения и информации о положении в исходном коде.

Какие типы токенов можно получить?

Лексический анализатор Python распознает различные типы токенов, такие как KEYWORD (ключевые слова), NAME (идентификаторы), NUMBER (числа), STRING (строки), OP (операторы), NEWLINE (переносы строк) и другие.

Как обрабатывать ошибки лексического анализа?

Лексический анализатор может возвращать исключение `tokenize.TokenError` при обнаружении нераспознанных последовательностей символов. Чтобы обработать эти ошибки, можно использовать `try-except` для проверки входного кода на допустимость.

0 Комментариев
Комментариев на модерации: 0
Оставьте комментарий