AGENTS.md
This commit is contained in:
parent
e0957b2b14
commit
ea01681c81
43
AGENTS.md
Normal file
43
AGENTS.md
Normal 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`, а не словарь.
|
||||
Loading…
Reference in a new issue