Труды КНЦ. Технические науки. – 2026. - № 1

2. Статический анализ кода и и звлечение м етаданны х Ядро процесса анализа реализовано в функциях process_single_file и process_xm l_file. Для каждого файла из списка выполняется: # Обработка одного файла process_single_file() { local pasdoc_list="$doc_dir/temp_${base_name}.inc" echo "$file_path" > "$pasdoc_list" # Генерирование XMLчерез PasDoc $PASDOC_PROG --output "$xml_output_dir" \ --format=simplexml \ --source "$pasdoc_list" >/dev/null 2>&1 # Извлечение описания модуля unit_desc=$(xmlstarlet sel -t -v "/unit/description/detailed" "$xml_file" 2>/dev/null | xargs) # Резервный поиск имени модуля [ -z "$unit_name" ] &&unit_name=$(grep -i "Aunit ""$file_path" | head -1 | sed 's/unit //' | sed 's/;.*//' | xargs) } Листинг 2. Статический анализ и извлечение метаданных — Генерирование промежуточного XML-представления: инструмент PasDoc запускается в режиме simplexml для одного файла, что минимизирует потребление памяти. Команда имеет вид: $PASDOC_PROG --output "$xml_output_dir" --format=simplexml --source "$pasdoc_list". Полученный XML-файл содержит структурированные метаданные: имена модулей (unit), классы (structure[@type='class']), их методы (routine), свойства (property), переменные (variable) и связанные с ними комментарии. — Парсинг и нормализация метаданных: для извлечения данных из XML используется утилита xmlstarlet. Например, извлечение описания модуля выполняется командой xmlstarlet sel -t -v "/unit/description/detailed" "$xml_file". Если имя модуля не удается определить из XML, проводится его поиск в исходном коде по ключевому слову unit. Этап обеспечивает переход от сырых данных к структурированному объектному представлению проекта. 3. Г енерация описаний с помощ ью больш ой языковой модели Данный этап, реализованный в функциях generate_ai_unit_description и generate_ai_class_description, является опциональным и активируется при наличии описанных инструментов (USE_AI=true). Его цель — восполнить пробелы в существующей документации. — Вызов LLM: запрос к языковой модели отправляется только если описание сущности (модуля или класса) отсутствует, пусто или является шаблонным (равно "..."). Это реализует принцип точечного вмешательства для экономии вычислительных ресурсов. — Формирование контекстного запроса: исходный код файла кодируется в base64 и включается в JSON-запрос к OpenAI-совместимому API ($AI_URL). Промпт содержит строгую инструкцию: «Дай краткое описание... один абзац, без форматирования», что направляет модель на генерирование лаконичных технических текстов. Модель по умолчанию — TeichAI/Qwen3-14B-C laude-Sonnet-4.5- Reasoning-Distill-GGUF:Q6_K. — Идемпотентность: сгенерированное описание немедленно записывается обратно в промежуточный XML-файл с помощью xmlstarlet ed. Это делает процесс устойчивым к повторным запускам: при следующем выполнении скрипта ранее сгенерированные описания будут восприняты как существующие и повторный запрос к LLM не последует. Труды Кольского научного центра РАН. Серия: Технические науки. 2026. Т. 17, № 1. С. 115-128. Transactions of the Kola Science Centre of r A s . Series: Engineering Sciences. 2026. Vol. 17, No. 1. P. 115-128. © Федоров А. М., Датьев И. О., Илясов М. О., Вишняков И. Г., 2026 1 2 0

RkJQdWJsaXNoZXIy MTUzNzYz