Название: Текстовый редактор с языковым процессором
Цель работы: Создание кроссплатформенного графического интерфейса (GUI) для языкового процессора в виде специализированного текстового редактора.
- Студент: Семешко Анастасия
- Курс: 3
- Группа: АП-326
- Факультет: АВТФ
- Год: 2026
Данное приложение представляет собой текстовый редактор с графическим интерфейсом, разработанный как основа для будущего языкового процессора. Редактор поддерживает стандартные операции с текстовыми файлами и имеет специальную область для вывода результатов синтаксического анализа.
Интерфейс содержит четыре основные области:
- Основное меню программы
- Панель инструментов с кнопками быстрого доступа
- Область ввода/редактирования текста
- Область отображения результатов (только для чтения)
Пользователь может изменять размеры всех областей, автоматически появляются полосы прокрутки.
- Язык программирования: Python 3.11
- GUI фреймворк: PyQt6 6.5.0
- Среда разработки: VS Code / PyCharm
- Сборка: PyInstaller 6.0.0
- Установить Python 3.9 или выше
- Установить зависимости:
pip install PyQt6
- Запустить приложение: python main.py Сборка исполняемого файла: pip install pyinstaller pyinstaller --onefile --windowed --name "TextEditor" --add-data "examples;examples" main.py
Для запуска готового .exe
- Перейти в папку dist
- Скопировать TextEditor.exe в любое место (рабочий стол, флешка)
- Дважды кликнуть для запуска (Приложение не требует установленного Python или дополнительных библиотек!)
- После успешного запуска .exe откроется главное окно редактора. Главное меню программы имеет следующую структуру:
- Файл a. Создать - Создание нового документа b. Открыть - Открытие существующего файла c. Сохранить - Сохранение текущего документа d. Сохранить как - Сохранение под новым именем e. Выход - Выход с проверкой сохранения
- Правка a. Отменить - Отмена последнего действия b. Повторить - Повтор последнего действия c. Вырезать - Вырезание выделенного текста d. Копировать - Копирование выделенного текста e. Вставить - Вставка текста из буфера f. Удалить - Удаление выделенного текста g. Выделить все - Выделение всего текста
- Текст a. Постановка задачи - Информация в область вывода b. Грамматика - Описание грамматики c. Классификация грамматики d. Метод анализа e. Тестовый пример f. Список литературы - Библиография g. Исходный код программы - Информация о коде
- Пуск a. Запустить синтаксический анализ
- Справка a. Вызов справки - Руководство пользователя b. О программе - Информация о программе
Языковой процессор: реализована тестовая версия (подсчет символов/слов) Поддерживаемые форматы: только текстовые файлы (.txt) в кодировке UTF-8 Размер файлов: не рекомендуется открывать файлы более 100 МБ Кроссплатформенность: собранный .exe работает только на Windows Системные требования: требуется Visual C++ Redistributable 2015-2022
Цель работы. Изучить назначение и принципы работы лексического анализатора в структуре компилятора. Спроектировать алгоритм (диаграмму состояний) и выполнить программную реализацию сканера для выделения лексем из входного текста. Интегрировать разработанный модуль в ранее созданный графический интерфейс языкового процессора.
Сведения об авторе. Выполнила: Студент гр.АП-326 АВТФ Семешко Анастасия
Постановка задачи: Разработать лексический анализатор (сканер) в соответствии с индивидуальным вариантом задания, интегрировать его в приложение из лабораторной работы №1 и обеспечить наглядный вывод результатов.
Требования к реализации сканера: Спроектировать диаграмму состояний конечного автомата, реализующего сканер, согласно варианту задания. Разработать программный модуль лексического анализа, который:
- принимает на вход строку (исходный текст программы);
- выделяет все допустимые лексемы согласно варианту;
- классифицирует лексемы по типам (например: "ключевое слово", "идентификатор", "число", "оператор", "разделитель").
- любые символы, не соответствующие ни одному из допустимых типов лексем, считать недопустимыми и выводить сообщение об ошибке с указанием позиции.
- учитывает многострочность входного текста.
Требования к интеграции и интерфейсу:
- Встроить сканер в ранее разработанный интерфейс и связать его с кнопкой "Пуск" и соответствующим пунктом меню.
- Область вывода результатов должна содержать следующие столбцы: Условный код (числовой идентификатор типа лексемы). Тип лексемы (текстовое описание). Лексема (выделенная подстрока). Местоположение (номер строки, начальная и конечная позиция символов).
- Реализовать навигацию по ошибкам: при щелчке на сообщении об ошибке в таблице результатов курсор в области редактирования должен устанавливаться на позицию недопустимого символа.
Входные и выходные данные: Вход: строка (текст программного кода), введенная пользователем в область редактирования. Выход: таблица, содержащая последовательность условных кодов и описаний лексем.
Вариант задания: 72 Разработать лексический анализатор для распознавания объявления перечисления (enum) на языке F#. Анализатор должен выделять следующие лексемы: ключевое слово type, идентификаторы (название перечисления и варианты), оператор присваивания =, разделитель вариантов |, и завершающий разделитель ;. Допустимые идентификаторы могут содержать буквы, цифры и символ подчеркивания, начинаться должны с буквы.
Примеры корректных входных строк: 1. type Day = | Monday | Tuesday | Wednesday | Thursday | Friday | Saturday | Sunday; 2. type Status = | Active | Inactive | Pending; 3. type Color = | Red = 0 | Green = 1 | Blue = 2
Перечень допустимых лексем: Тип лексемы Код Описание Примеры KEYWORD 1 Ключевое слово type type IDENTIFIER 2 Идентификаторы Day, Monday, RGB_Red, Status OPERATOR 3 Оператор присваивания = PIPE 4 Разделитель вариантов | SEPARATOR 5 Завершающий разделитель ; WHITESPACE 6 Пробельные символы пробел, табуляция, перевод строки
Тестовые примеры:
Пример 1:
Входные данные:
type Status = | Active | Inactive | Pending;
Выходные даныне:
Пример 2:
Входные данные:
type Day =
| Monday
| Tuesday
| Wednesday
| Thursday
| Friday
| Saturday
| Sunday;
Выходные данные:
Пример 3:
Входные данные:
type Day =
| Monday
| Tuesday
| Wednesday
* Thursday
| Friday
| Saturday
| Sunday;
Выходные данные:
- Название: Реализация алгоритма поиска подстрок с помощью регулярных выражений
Цель работы: Изучить теоретические основы регулярных выражений и их применение для поиска и извлечения подстрок из текста. Освоить практические навыки использования библиотечных средств работы с регулярными выражениями, а также интеграцию алгоритмов поиска в графический интерфейс приложения.
-
Сведения об авторе. Выполнила: Студент гр.АП-326 АВТФ Семешко Анастасия
-
Постановка задачи: Разработать модуль поиска подстрок с использованием регулярных выражений, интегрировать его в существующее приложение (текстовый редактор) и обеспечить наглядный вывод результатов.
Студент получает индивидуальный вариант, содержащий 3 задачи на поиск подстрок определенных форматов.
I блок задач: 29. Построить РВ для поиска цитат (предложений, заключенных в одинарные кавычки). II блок задач: 29. Построить РВ, описывающее комментарии (язык C++). III блок задач: 4. Построить РВ, описывающее MAC-адрес.
- Решение 3 задач (регулярные выражения).
Описание задачи; Регулярное выражение с пояснением каждого обозначения. Примеры строк, которые должны находиться; Примеры строк, которые не должны находиться; Тестовые примеры (скриншоты).
Задача 1. Описание: В текстовых документах часто встречаются цитаты, выделенные с помощью одинарных кавычек. Цитата может содержать: Любые буквы (русские, английские) Цифры Знаки препинания Пробелы Экранированные символы (например, ') Необходимо построить регулярное выражение для поиска цитат (предложений), заключенных в одинарные кавычки.
Регулярное выражение Базовое выражение: '[^']' Расширенное выражение: '([^'\\]|\.)' Пояснение обозначений: ' - Открывающая одинарная кавычка [^']* - Любое количество символов, кроме одинарной кавычки [^'\\] - Любой символ, кроме одинарной кавычки и обратного слеша \. - Экранированный символ (например, ', \, \n) ([^'\\]|\.)* - Любое количество: либо обычный символ (не кавычка и не слеш), либо экранированная последовательность ' - Закрывающая одинарная кавычка (...) - Группа захвата для извлечения содержимого цитаты
Примеры строк, которые должны находиться
- 'Это простая цитата'
- 'Путь к файлу: C:\Program Files\'
- 'English quote'
- '' - пустая цитата
Примеры строк, которые НЕ должны находиться
- "Это двойные кавычки, не цитата"
- 'Незакрытая цитата
- Незакрытая 'цитата
- 'Это' 'не' 'одна' 'цитата' // 4 отдельные цитаты, каждая найдется отдельно
- 'Это не цитата (экранированная кавычка не открывает цитату)
Задача 2. **Описание:**В языке программирования C++ используются два типа комментариев:
- Однострочные комментарии - начинаются с символов
//и продолжаются до конца строки - Многострочные комментарии - начинаются с
/*и заканчиваются*/, могут занимать несколько строк
Необходимо построить регулярное выражение, которое будет находить оба типа комментариев в тексте программы.
Регулярное выражение //[^\n]|/*[\s\S]?*/
Пояснение обозначений
// - Начало однострочного комментария
[^\n]* - Любое количество символов, кроме символа новой строки
| - Оператор "или" (логическое ИЛИ)
/* - Начало многострочного комментария (экранированный символ )
[\s\S]? - Любой символ (включая пробельные и непробельные), 0 или более раз, в нежадном режиме
*/ - Конец многострочного комментария (экранированный символ )
Примеры строк, которые должны находиться
// Это однострочный комментарий
int x = 5; // Комментарий после кода
/ Многострочный комментарий /
/
Комментарий,
занимающий
несколько строк
/
/ Вложенный /* комментарий */ не поддерживается, но найдет до первого /
Примеры строк, которые НЕ должны находиться
"// это не комментарий, а строка"
"/ тоже не комментарий */"
http://example.com // URL, не комментарий
5 // 2 // деление, не комментарий
Тестовые примеры

Задача 3. **Описание:**MAC-адрес (Media Access Control) - уникальный идентификатор сетевого устройства. Существует несколько форматов записи MAC-адресов:
С разделителями: XX:XX:XX:XX:XX:XX или XX-XX-XX-XX-XX-XX
Без разделителей: XXXXXXXXXXXX (12 шестнадцатеричных цифр)
С точками: XXXX.XXXX.XXXX
Где X - шестнадцатеричная цифра (0-9, A-F, a-f).
Необходимо построить регулярные выражения для поиска MAC-адресов в различных форматах.
Регулярное выражение
Для mac-адреса с разделителями (: или -): [0-9A-Fa-f]{2}[:-][0-9A-Fa-f]{2}[:-][0-9A-Fa-f]{2}[:-][0-9A-Fa-f]{2}[:-][0-9A-Fa-f]{2}[:-][0-9A-Fa-f]{2}
Для MAC-адреса без разделителей: [0-9A-Fa-f]{12}
Пояснение обозначений
[0-9A-Fa-f] - Шестнадцатеричная цифра (0-9, A-F, a-f) {2} - Ровно 2 шестнадцатеричные цифры {4} - Ровно 4 шестнадцатеричные цифры {12} - Ровно 12 шестнадцатеричных цифр [:-] - Символ двоеточия : или дефиса - . - Точка (экранированная) | - Оператор "или"
Примеры строк, которые должны находиться
С разделителями:
00:1A:2B:3C:4D:5E FF-FF-FF-FF-FF-FF 00-14-22-01-23-45 08:00:27:AB:CD:EF aa:bb:cc:dd:ee:ff
Без разделителей:
001A2B3C4D5E FFFFFFFFFFFF 001422012345 aabbccddeeff
С точками:
001A.2B3C.4D5E FFFF.FFFF.FFFF 0014.2201.2345 aabb.ccdd.eeff
Примеры строк, которые НЕ должны находиться
00:1A:2B:3C:4D // Неполный MAC-адрес 00:1A:2B:3C:4D:5G // Буква G не является шестнадцатеричной 001A2B3C4D // Только 10 символов (нужно 12) 001A.2B3C.4D // Неполный формат с точками 00-1A-2B-3C-4D-5E-FF // Слишком много групп
Дополнительное задание
Постановка задачи
Для поиска комментраиев на С++ разработан конечный автомат, который обрабатывает текст посимвольно и выделяет комментарии без использования регулярных выражений. Автомат поддерживает экранированные символы (', \, \n, \t и др.).





.png)
