kvs/AGENTS.md
2026-05-17 12:58:42 +03:00

3.2 KiB
Raw Blame History

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, а не словарь.