Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Repository files navigation

🌲 Сибиряк — русскоязычный язык программирования

Сибиряк — это полноценный компилируемый язык программирования, являющийся русскоязычным аналогом Go (Golang). Абсолютно всё в языке написано по-русски: ключевые слова, встроенные функции, типы данных, операторы управления потоком.

Расширение файлов: .сбк

image

✨ Особенности

  • 🇷🇺 Полностью русский — все ключевые слова на русском языке
  • Компилируемый — транспилируется в C, затем компилируется GCC/Clang
  • 🔁 Аналог Go — синтаксис и концепции максимально близки к Golang
  • 📦 Пакетная система — как в Go: пакет главный
  • 🔧 Структуры и методы — объектно-ориентированный стиль
  • 🚀 Горутины и каналы — декларации поддержаны в синтаксисе

📦 Установка

# Требования: Python 3.12+, GCC или Clang
git clone ...
cd сибиряк
chmod +x сибиряк

# Опционально: добавить в PATH
sudo ln -s $(pwd)/сибиряк /usr/local/bin/сибиряк

🚀 Быстрый старт

Создайте файл привет.сбк:

пакет главный

импорт "фмт"

функ Главная() {
    фмт.Печать("Привет, мир!")
}

Скомпилируйте и запустите:

./сибиряк привет.сбк          # компиляция
./привет                       # запуск

# или за один шаг:
./сибиряк запустить привет.сбк

📖 Справочник языка

Сравнение с Go

Go Сибиряк Описание
package пакет Объявление пакета
import импорт Импорт пакетов
func функ Объявление функции
return возврат Возврат из функции
if если Условный оператор
else иначе Ветка иначе
for для Цикл
range диапазон Перебор коллекции
switch перекл Переключатель
case случай Ветка переключателя
default умолч Ветка по умолчанию
var пер Объявление переменной
const конст Константа
struct структ Структура
interface интерф Интерфейс
map карта Словарь
chan канал Канал
go горутина Горутина
defer отложить Отложенный вызов
select выбор Выбор канала
break прервать Прерывание цикла
continue продолжить Продолжение цикла
goto перейти Переход по метке
panic паника Паника
recover восстан Восстановление
true истина Булево истина
false ложь Булево ложь
nil ноль Нулевой указатель
make создать Создать срез/карту/канал
new новый Выделить память
append добавить Добавить в срез
len длина Длина
cap ёмкость Ёмкость
delete удалить Удалить из карты
copy копировать Копировать срез
close закрыть Закрыть канал
fmt.Println фмт.Печать Вывод с новой строкой
fmt.Printf фмт.ПечатьФ Форматированный вывод

Типы данных

Go Сибиряк Описание
int цел Целое число
int8 цел8 8-бит целое
int16 цел16 16-бит целое
int32 цел32 32-бит целое
int64 цел64 64-бит целое
byte байт Байт (uint8)
rune руна Символ Unicode
float32 вещ32 Вещественное 32-бит
float64 вещ64 Вещественное 64-бит
string строка Строка
bool булево Булево
any любой Любой тип
error ошибка Ошибка

📝 Примеры

Переменные и типы

пер х цел = 42          // с типом и значением
пер у цел               // только тип (= 0)
з := "строка"           // короткое объявление
конст ПИ вещ64 = 3.14   // константа

Функции

функ сложить(а цел, б цел) цел {
    возврат а + б
}

// Несколько возвращаемых значений
функ делить(а цел, б цел) (цел, ошибка) {
    если б == 0 {
        возврат 0, "деление на ноль"
    }
    возврат а / б, ноль
}

Структуры и методы

структ Человек {
    Имя    строка
    Возраст цел
}

функ (ч *Человек) Поздороваться() {
    фмт.ПечатьФ("Привет, меня зовут %s!\n", ч.Имя)
}

// Использование:
чел := Человек{Имя: "Иван", Возраст: 30}
чел.Поздороваться()

Циклы

// Обычный for
для i := 0; i < 10; i++ {
    фмт.ПечатьФ("%ld\n", i)
}

// Бесконечный цикл
для {
    // ...
    прервать
}

// По диапазону
для i, в := диапазон список {
    фмт.ПечатьФ("%ld: %ld\n", i, в)
}

Переключатель

// С выражением
перекл день {
    случай 1:
        фмт.Печать("Понедельник")
    случай 6, 7:
        фмт.Печать("Выходной")
    умолч:
        фмт.Печать("Будень")
}

// Без выражения (как цепочка if-else)
перекл {
    случай оценка >= 90:
        фмт.Печать("Отлично!")
    случай оценка >= 75:
        фмт.Печать("Хорошо!")
    умолч:
        фмт.Печать("Удовлетворительно")
}

🔧 Флаги компилятора

сибиряк <файл.сбк>              — скомпилировать
сибиряк <файл.сбк> -о <имя>    — с именем выходного файла
сибиряк <файл.сбк> -с           — только C-код (без компиляции)
сибиряк <файл.сбк> --токены     — показать токены лексера
сибиряк <файл.сбк> --аст        — показать АСД (синтаксическое дерево)
сибиряк запустить <файл.сбк>    — скомпилировать и сразу запустить
сибиряк --версия                — версия компилятора
сибиряк --помощь                — справка

🏗️ Архитектура компилятора

Исходный код (.сбк)
        │
        ▼
   ┌─────────┐
   │  Лексер  │  лексер.py — разбивает код на токены
   └─────────┘
        │ токены
        ▼
   ┌─────────┐
   │  Парсер  │  парсер.py — строит АСД (абстрактное синтаксическое дерево)
   └─────────┘
        │ АСД
        ▼
   ┌──────────────┐
   │ Генератор C  │  генератор_c.py — транспилирует АСД в C-код
   └──────────────┘
        │ .c файл
        ▼
   ┌─────┐
   │ GCC │  — компилирует C в исполняемый файл
   └─────┘
        │
        ▼
   Исполняемый файл

🧪 Запуск тестов

python3 тесты/тесты.py

📁 Структура проекта

сибиряк/
├── сибиряк              # Исполняемый скрипт (точка входа)
├── README.md
├── компилятор/
│   ├── сибиряк.py       # Главный модуль компилятора
│   ├── лексер.py        # Лексический анализатор
│   ├── парсер.py        # Синтаксический анализатор
│   ├── аст.py           # Узлы абстрактного синтаксического дерева
│   └── генератор_c.py   # Генератор C-кода
├── примеры/
│   ├── привет.сбк       # Привет, мир!
│   ├── фибоначчи.сбк    # Числа Фибоначчи
│   ├── структуры.сбк    # Структуры и методы
│   └── витрина.сбк      # Витрина возможностей
└── тесты/
    └── тесты.py         # Тестовый набор (22 теста)

🗺️ Дорожная карта

  • Лексер (полная поддержка кириллицы)
  • Парсер (все основные конструкции Go)
  • Генератор C-кода
  • Компиляция через GCC
  • Тестовый набор (22 теста)
  • Система типов и проверка типов
  • Сборщик мусора
  • Настоящие горутины (через pthreads)
  • Стандартная библиотека Сибиряка
  • Самокомпиляция (компилятор на самом Сибиряке)
  • Пакетный менеджер

Сибиряк — крепкий, надёжный, как сибирский мороз 🌨️

About

Российский язык программирования

Resources

Stars

13 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages