Metadata-Version: 2.4
Name: mint-lang
Version: 0.2.2
Summary: Конструктор кастомных языков программирования на Python (с поддержкой if/while, чисел, списков, словарей) + автосборка в exe
Author: Stray_2024
License: MIT
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Requires-Python: >=3.8
Description-Content-Type: text/markdown
Provides-Extra: build
Requires-Dist: pyinstaller; extra == "build"

# Mint Lang - конструктор кастомных языков программирования

Библиотека для создания СВОИХ языков программирования на Python. Ты описываешь
свои команды, а библиотека даёт тебе бесплатно: `if/else`, `while`, переменные
с реальными типами (числа, строки, списки, словари), обработку ошибок с
подсказками, транспиляцию в C++/MicroPython, и автосборку готового языка
в `.exe` + инсталлятор.

## Установка

```bash
pip install mint-lang
```

## Быстрый старт

```python
from mintlang.builder import LanguageBuilder

lang = LanguageBuilder("MyLang")

@lang.command("say")
def cmd_say(args):
    print(" ".join(str(a) for a in args))

@lang.command("upload")
def cmd_upload(args):
    print(f"Загружаю библиотеку: {args[0]}")

lang.main()   # запуск как обычный скрипт: python my_lang.py script.mylang
```

## Что умеет твой язык из коробки

Скрипт на твоём языке (`script.mylang`):
set x 5
set y 10

if $x < $y
say x меньше y
else
say x больше или равно y
end

set i 0
while $i < 5
say $i
set i $i + 1
end

set nums [1, 2, 3, 4, 5]
upload discord.py
Поддерживаются: числа, строки, списки `[1, 2, 3]`, словари `{a: 1, b: 2}`,
операторы `+ - * / % == != < > <= >= && ||`, подстановка переменных через `$имя`.

## Три режима запуска своего языка

```python
if __name__ == "__main__":
    import sys
    if "--build" in sys.argv:
        lang.autobuild()          # сборка в exe + инсталлятор
    elif len(sys.argv) > 1:
        lang.main()                # запуск файла: python script.py test.mylang
    else:
        lang.run_source("...")     # демо-режим со встроенным примером
```

## Транспиляция в C++ (Arduino/ESP32) и MicroPython

Для каждой своей команды можно дополнительно прописать, как она выглядит
на плате - и получить готовый скетч/скрипт для прошивки:

```python
lang.transpile_rule(
    "led",
    cpp="strip.setPixelColor({0}, strip.Color(255,0,0)); strip.show();",
    micropython="np[{0}] = (255, 0, 0)\nnp.write()",
)

lang.use_library("Adafruit_NeoPixel")   # сам добавит #include и настройку

cpp_code = lang.to_cpp(source_code)
upy_code = lang.to_micropython(source_code)
```

`{0}`, `{1}`... - аргументы команды по порядку, как они написаны в скрипте
(`$x` автоматически превращается в `x` для целевого языка).

`if/while/set` транспилируются автоматически - их не нужно регистрировать.

### Готовые заготовки Adafruit-библиотек

`Adafruit_NeoPixel`, `Adafruit_GFX`, `Adafruit_ST7789`, `Adafruit_Sensor`,
`Adafruit_BME280` - для них `use_library()` сам подставит `#include`,
глобальную переменную и вызов в `setup()`. Для остальных библиотек добавит
обобщённый `#include <ИмяБиблиотеки.h>`.

## Сборка в exe + инсталлятор

Когда твой язык готов - в конце своего Python-файла вызови:

```python
lang.autobuild()
```

Это соберёт exe через PyInstaller и инсталлятор через Inno Setup
(https://jrsoftware.org/isdl.php должен быть установлен на Windows-машине).

## Базовый язык Mint (если нужен готовый ЯП, а не конструктор)

Библиотека также включает готовый простой язык Mint:

```python
from mintlang import run_source

run_source('''
x = 5
print(x + 1)
''')
```

Или через CLI: `mint script.mint`

## Полный пример

Смотри `stray_lang.py` - подробно прокомментированный шаблон со всеми
режимами запуска и примерами команд.
