Files
tverd-plus-tokenizer/README.md

73 lines
7.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Программное изделие «Ъ» (Проект «Твердь»)
## Техническое задание и описание программы
---
### 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)