2026-06-20 09:27:22 +03:00
```markdown
2026-05-17 12:58:42 +03:00
# AGENTS.md
## Правила для агентов и участников проекта К В С
К В С — русскоязычный ассемблер x86-64, написанный на Python, генерирующий ELF-файлы.
### Ограничения
1. **Никаких регулярных выражений (`re`).**
Разбор строк — только посимвольно, через циклы и сравнения. Это делает код переносимым на другие языки без изменений логики.
2. **Минимум ООП.**
2026-06-27 11:24:45 +03:00
- Классы **не создавать** . Код пишется процедурно: функции принимают данные, возвращают данные.
2026-05-17 12:58:42 +03:00
3. **Изоляция логики важнее DRY.**
2026-06-20 09:27:22 +03:00
Если модуль может быть автономным — он должен быть автономным. Допустимо дублирование кода ради независимости модуля от других. Пример: кодировщики фиксированного и переменного размера содержат копии функций, чтобы не импортировать их и оставаться полностью самостоятельными.
2026-05-17 12:58:42 +03:00
4. **Русские названия везде, кроме ELF.**
2026-06-20 09:27:22 +03:00
- Внутри компилятора — русские имена секций, директив, регистров, инструкций.
- В ELF-файле — стандартные латинские имена (`.text`, `.data` , `.bss` ).
- Имена файлов, переменных и функций в коде — **английские** (кроме русифицированных скриптов верхнего уровня).
2026-05-17 12:58:42 +03:00
### Структура проекта
```
2026-06-20 09:27:22 +03:00
квс _с б о р ка .py — Главный сборочный скрипт (запускает все проходы по порядку)
квс _ле кс е р .py — Лексер (исходник → токены)
квс _па р с е р .py — Парсер (токены → AST)
квс _пр о х о д1.py — Первый проход: генерация CSV с заглушками для неизвестных меток
квс _пр о х о д2.py — Второй проход: разрешение меток (замена заглушек на реальные адреса)
квс _пр о х о д3.py — Третий проход: подстановка констант в команды
квс _пр о х о д4.py — Четвёртый проход: перекодирование инструкций с подставленными значениями
квс _пр о х о д5.py — Пятый проход: генерация корректных таблиц секций для совместимости с toolchain
квс _пр о х о д6.py — Шестой проход: постобработка и сортировка CSV для визуального анализа
квс _финс б о р .py — Сборщик ELF (CSV → исполняемый файл)
kvs_data.py — Общие константы и данные (регистры, инструкции, функции)
kvs_encoder.py — Фасад кодировщика (реэкспорт из fixsize + mutsize)
kvs_encoder_fixsize.py — Кодировщик инструкций фиксированного размера
kvs_encoder_mutsize.py — Кодировщик инструкций переменного размера + диспетчер
2026-05-17 12:58:42 +03:00
```
2026-06-20 09:27:22 +03:00
### Русификация
**Русифицированы (пользовательская часть):**
- Имена скриптов верхнего уровня: `квс _*.py` (кроме `квс _финс б о р .py` , `квс _с б о р ка .py` )
- Комментарии и документация в большинстве файлов
- Пользовательский синтаксис: инструкции, регистры, директивы
**Остались на английском:**
- Имена файлов: `kvs_data.py` , `kvs_encoder.py` , `kvs_encoder_fixsize.py` , `kvs_encoder_mutsize.py`
- Внутренние имена переменных, констант и функций внутри этих файлов
- Технические идентификаторы в коде (ключи словарей, имена функций)
2026-05-17 12:58:42 +03:00
### Стиль
2026-06-20 09:27:22 +03:00
- Комментарии и документация — на русском (в русифицированных файлах).
2026-05-17 12:58:42 +03:00
- Имена функций — `snake_case` , осмысленные.
- Размеры инструкций — явные числа, никаких `suffix` -трюков.
- Каждая директива резервирования — отдельная ветка `if` , а не словарь.
2026-06-20 09:27:22 +03:00
- Для файлов, оставшихся на английском (`kvs_*.py`), комментарии допустимы на русском или английском — по усмотрению автора.
### Важно
- `kvs_build.py` переименован в `квс _с б о р ка .py` — используйте актуальное имя.
- `kvs_builder.py` переименован в `квс _финс б о р .py` .
- В с е проходы (`kvs_pass*.py`) переименованы в `квс _пр о х о д*.py` .
- Кодировщики и `kvs_data.py` **не переименованы** — их имена остались на английском.
```