# Программное изделие «Ъ» (Проект «Твердь») ## Техническое задание и описание программы --- ### 1. Введение и область применения Настоящий документ устанавливает требования к архитектуре, реализации и функционированию программного изделия (ПИ) «Ъ» (компонент «Токенизатор»). * **Наименование:** Программный комплекс системного программирования «Ъ». * **Область применения:** Создание детерминированного системного ПО, разработка вычислительных модулей для архитектур семейства «Эльбрус» и x86, требующих сертификации на отсутствие недекларированных возможностей (НДВ). ### 2. Основание для разработки Разработка ведется на основании плана инициативной разработки инструментальных средств для языка функционально-процедурной парадигмы Ъ+ (низкоуровневый базис языка Ъ++) и в соответствии с требованиями к безопасной разработке (SDL). ### 3. Технические требования #### 3.1. Требования к функциональным характеристикам ПИ должно обеспечивать лексический анализ входных потоков данных и преобразование их в последовательность токенов на основе детерминированного конечного автомата (ДКА). #### 3.2. Требования к входным данным * **Кодировка:** Соответствие стандарту ISO/IEC 10646 (UTF-8). * **Идентификаторы:** Поддержка последовательностей символов кириллического и латинского алфавитов. * **Спецсимволы:** Обязательная префиксация сущностей для однозначной идентификации: * `@` — идентификаторы переменных (объекты данных); * `:` — идентификаторы меток управления (адресация переходов); * `?` — операторы логического ветвления (предикаты). #### 3.3. Классификация управляющих конструкций | Тип токена | Символьное обозначение | Функциональное назначение | | :--- | :--- | :--- | | **Начало блока** | `Ъ+` | Открытие исполняемого контекста | | **Конец блока** | `Ъ-` | Закрытие исполняемого контекста | | **Оператор конвейера** | `|>` | Передача данных между функциями | | **Оператор записи** | `<<` | Инструкция заполнения буфера данных | #### 3.4. Требования к надежности и безопасности 1. **Прослеживаемость:** Обеспечение фиксации координат (строка, столбец) каждого токена для реализации сквозного аудита кода. 2. **Целостность данных:** Использование механизмов контроля границ и строгой типизации на этапе компиляции (статический анализ средствами языка Rust). 3. **Автономность:** Возможность сборки и функционирования компилятора в изолированной программной среде («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) для обоих бэкендов. ### 7. Приложения Дополнительные сведения о проекте доступны в следующих документах: - [Участники разработки](docs/CONTRIBUTORS.md) - [План развития (Roadmap)](docs/ROADMAP.md) - [Грамматика языка](docs/grammar.md)