2. Lexical analysis — Python 3.13.2 documentation

Лексический анализ – это первый шаг компиляции 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` для проверки входного кода на допустимость.