Skip to content
/ flower Public

Оптимизирующий байт-код компилятор, виртуальная стековая машина и отладчик.

License

Notifications You must be signed in to change notification settings

ediah/flower

Repository files navigation

Icon

Документация

Анализ покрытия

Total alerts Language grade: C/C++ Coverage

Краткое описание

Flower — строго типизированный язык процедурного программирования. Языком поддерживается многопоточность, указатели заменены на концепт "общей" (или "разделяемой") переменной, есть 4 простых типа и один составной. Продвинутая работа со структурами: над ними можно проводить арифметические операции.

В репозитории ведётся разработка:

  1. Оптимизирующего байт-код компилятора (flc),

  2. Виртуальной стековой машины (flvm),

  3. Отладчика виртуальной машины (fldbg).

Порядок работы

  1. Скомпилировать написанную программу source.fl:
./flc source.fl
  1. Запустить бинарный файл на виртуальной машине:
./flvm out.bin
  1. В случае ошибок или иных проблем отладить:
./fldbg out.bin
  1. Если вносятся изменения в код проекта, все изменения можно автоматически протестировать с помощью команды:
./fltest [-O] [-m] [-r] ./test/A-unit/*.fl ./test/B-unit/*.fl

Документация

Скоро будет доступна в разделе wiki, планируется работа с doxygen.

Примеры

Факториал

def factorial(int n): int {
    if (n > 1) 
        return factorial(n - 1) * n;
    else
        return 1;
}

program {
    int a;
    read(a);
    write(factorial(a));
}

Многопоточность

def iterate(shared int a): shared int {
    for (int i = 1; i <= 5; i = i + 1) {
        /* write("Итерация #", i, ": a = ", a); */
        a = a / 2;
    }
    return a;
}

program {
    shared int x, y;
    
    read(x);
    read(y);

    thread:1 { x = iterate(x); }
    thread:2 { y = iterate(y); }

    fork(1, 2);
    lock();

    write(x, " ", y);
}

Множество других примеров Вы можете найти в папке 'test'.