6.9 KiB
Программное изделие «Ъ» (Проект «Твердь»)
Техническое задание и описание программы
1. Введение и область применения
Настоящий документ устанавливает требования к архитектуре, реализации и функционированию программного изделия (ПИ) «Ъ» (компонент «Токенизатор»).
- Наименование: Программный комплекс системного программирования «Ъ».
- Область применения: Создание детерминированного системного ПО, разработка вычислительных модулей для архитектур семейства «Эльбрус» и x86, требующих сертификации на отсутствие недекларированных возможностей (НДВ).
2. Основание для разработки
Разработка ведется на основании плана инициативной разработки инструментальных средств для языка функционально-процедурной парадигмы Ъ+ (низкоуровневый базис языка Ъ++) и в соответствии с требованиями к безопасной разработке (SDL).
3. Технические требования
3.1. Требования к функциональным характеристикам
ПИ должно обеспечивать лексический анализ входных потоков данных и преобразование их в последовательность токенов на основе детерминированного конечного автомата (ДКА).
3.2. Требования к входным данным
- Кодировка: Соответствие стандарту ISO/IEC 10646 (UTF-8).
- Идентификаторы: Поддержка последовательностей символов кириллического и латинского алфавитов.
- Спецсимволы: Обязательная префиксация сущностей для однозначной идентификации:
@— идентификаторы переменных (объекты данных);:— идентификаторы меток управления (адресация переходов);?— операторы логического ветвления (предикаты).
3.3. Классификация управляющих конструкций
| Тип токена | Символьное обозначение | Функциональное назначение |
|---|---|---|
| Начало блока | Ъ+ |
Открытие исполняемого контекста |
| Конец блока | Ъ- |
Закрытие исполняемого контекста |
| Оператор конвейера | ` | >` |
| Оператор записи | << |
Инструкция заполнения буфера данных |
3.4. Требования к надежности и безопасности
- Прослеживаемость: Обеспечение фиксации координат (строка, столбец) каждого токена для реализации сквозного аудита кода.
- Целостность данных: Использование механизмов контроля границ и строгой типизации на этапе компиляции (статический анализ средствами языка Rust).
- Автономность: Возможность сборки и функционирования компилятора в изолированной программной среде («Air-gap» разработка) без обращения к внешним сетям.
4. Условия эксплуатации и программная совместимость
- Язык реализации: Rust (стандарт ISO/IEC), исключая использование стандартной библиотеки (
no_std) для минимизации вектора атак и исключения скрытых вызовов ОС. - Зависимости: Использование внешних динамических библиотек сторонних разработчиков не допускается.
- Среда функционирования: POSIX-совместимые операционные системы, а также Bare-metal окружения.
5. Логическая структура (Алгоритм)
Лексический анализатор функционирует как однопроходный сканер. Игнорирование избыточных данных (комментариев) обеспечивается за счет распознавания парных ограничителей <[ и ]>. ПИ должно поддерживать рекурсивную вложенность блоков комментариев без жесткого ограничения уровня вложенности.
6. Стадии и этапы разработки
6.1. Разработка фронтенд-части
- Реализация модуля синтаксического разбора UTF-8 в режиме
no_std. - Описание грамматики языка в форме Бэкуса — Наура (EBNF).
- Разработка тестов для верификации кириллических идентификаторов.
6.2. Промежуточное представление и типизация
- Проектирование структур данных абстрактного синтаксического дерева (AST).
- Реализация механизмов статического вывода типов для констант.
6.3. Генерация целевого кода и испытания
- Реализация модуля генерации LLVM IR для высокопроизводительных систем (x86/ARM).
- Разработка бэкенда для интеграции с компилятором LCC (архитектура «Эльбрус») через промежуточное представление.
- Обеспечение сквозной передачи отладочных символов (DWARF) для обоих бэкендов.