Образовательный репозиторий с практическими реализациями конечных автоматов (FSM), вычислительных моделей и интерпретаторов на языке C. Все модули собираются через CMake, для GUI-приложений используется raylib.
Основной модуль проекта. Каждый автомат реализован как независимый модуль с функциями init / reset / tick.
| Файл | Описание |
|---|---|
fsm_coin |
Автомат монетоприёмника. Принимает монеты достоинством 1, 3, 5, 10 и считает сдачу. |
fsm_delay |
Элемент задержки. Двухсостояние (ZERO / ONE), сдвигает бинарный сигнал на один такт. |
fsm_insert |
Автомат обнаружения вставки подстроки. Три состояния: INSERTING_A, B, C. |
fsm_welding |
Контроллер сварочного аппарата. Три параллельных автомата: ток (I), напряжение (U), подача проволоки (V). Состояния: OFF → HEAT → WELDING → COOL → COMPLETE. |
fsm_bulk |
Управление сыпучими материалами. Сложный автомат с 9+ состояниями, 64-битными регистрами входов/выходов, датчиками концевых выключателей и таймерами. |
transport_loader |
Система автоматической транспортировки с поиском пути по лабиринту (BFS). Конфигурируется через factory.json. |
Конечный автомат управления пневматическим цилиндром. Поддерживает таймауты и задержки между состояниями.
Полная реализация машины Тьюринга:
- Лента ограничена 30 ячейками
- Таблица переходов задаётся в коде
- Поддержка произвольных алфавитов символов и состояний
- Включены прямые реализации конкретных вычислений (
turing_direct_*.c)
Клеточный автомат Конвея с GUI-визуализацией:
- Настраиваемый размер сетки
- Предустановленные паттерны: глайдер, вирус, кошка и другие (
sample-*.txt) - Анимированная отрисовка через raylib
Симуляция фуражировки на основе генетического программирования (по материалам EP93.pdf):
- Сетка 32×32 (тор)
- 5-состояниевый автомат поведения муравья
- Муравей собирает 89 «яблок»
- Движение: UP / RIGHT / DOWN / LEFT
Шахматная игра с графическим интерфейсом (raylib). Включает рендер доски, фигур и игровую логику.
Виртуальная машина языка Forth. Базовые слова словаря и стековые операции.
Лексер и парсер арифметических выражений:
- Целые и вещественные числа
- Операторы:
+,-,*,/,^(возведение в степень) - Функции:
tg(тангенс) и другие - Поддержка разбора из файла и строки
Реализации конечных автоматов для сопоставления с образцом:
regexp_nums_1/2— числовые паттерныregexp_isbn— валидация ISBNregexp_tags— разметка / теги
Интерпретатор подмножества языка C.
Разделяемая библиотека:
- Матричные операции (2D-массивы)
- Битовые операции (
memory_set_bit,memory_get_bit,memory_reset_bit) - JSON-парсер (cJSON)
- SHA3, Base64
- Конфигурационный файл (INI-подобный)
- Логгер (
c_logger)
cmake -B build -DGUI=ON # включить GUI (raylib)
cmake --build buildОпциональные флаги CMake:
| Флаг | Описание |
|---|---|
-DGUI=ON |
Сборка GUI-приложений (требует raylib) |
-DANALYZE_ENABLE=ON |
Интеграция статического анализа PVS-Studio |
- Основной код: C90 / C99
- GUI-код: C++20
- Компилятор: GCC / Clang / MSVC