Files
tverd-plus-tokenizer/README.md

7.2 KiB
Raw Permalink Blame History

Программное изделие «Ъ» (Проект «Твердь»)

Техническое задание и описание программы


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. Приложения

Дополнительные сведения о проекте доступны в следующих документах: