AGENTS.md

This commit is contained in:
mzhoot 2026-05-17 12:58:42 +03:00
parent e0957b2b14
commit ea01681c81

43
AGENTS.md Normal file
View file

@ -0,0 +1,43 @@
# AGENTS.md
## Правила для агентов и участников проекта КВС
КВС — русскоязычный ассемблер x86-64, написанный на Python, генерирующий ELF-файлы.
### Ограничения
1. **Никаких регулярных выражений (`re`).**
Разбор строк — только посимвольно, через циклы и сравнения. Это делает код переносимым на другие языки без изменений логики.
2. **Минимум ООП.**
- Существующие классы (`Pass1`, `Pass2`, `Parser`) **не переписывать** без явной команды. Они работают — не трогай.
- Новые классы **не создавать**. Код пишется процедурно: функции принимают данные, возвращают данные.
3. **Изоляция логики важнее DRY.**
Если модуль может быть автономным — он должен быть автономным. Допустимо дублирование кода ради независимости модуля от других. Пример: `kvs_pass2_encoder_mutsize.py` содержит копии функций из `kvs_pass2_encoder_fixsize.py`, чтобы не импортировать их и оставаться полностью самостоятельным.
4. **Русские названия везде, кроме ELF.**
Внутри компилятора — русские имена секций, директив, регистров. В ELF-файле — стандартные латинские имена (`.text`, `.data`, `.bss`).
### Структура проекта
```
kvs_lexer.py — лексер (исходник → токены)
kvs_parser.py — парсер (токены → AST)
kvs_pass1.py — первый проход (размеры секций, адреса меток)
kvs_pass2.py — второй проход (AST + pass1 → CSV с байтами)
kvs_builder.py — сборщик ELF (CSV + pass1 → исполняемый файл)
kvs_data.py — общие константы и данные
kvs_build.py — главный сборочный скрипт (вызывает всё по порядку)
kvs_pass2_encoder_fixsize.py — кодировщик инструкций фиксированного размера
kvs_pass2_encoder_mutsize.py — кодировщик инструкций переменного размера + диспетчер
kvs_pass2_encoder.py — реэкспорт из fixsize + mutsize (совместимость)
```
### Стиль
- Комментарии и документация на русском.
- Имена функций — `snake_case`, осмысленные.
- Размеры инструкций — явные числа, никаких `suffix`-трюков.
- Каждая директива резервирования — отдельная ветка `if`, а не словарь.