Skip to content

BasePractice/c_fsm

Repository files navigation

c_fsm — Конечные автоматы и вычислительные модели на C

Образовательный репозиторий с практическими реализациями конечных автоматов (FSM), вычислительных моделей и интерпретаторов на языке C. Все модули собираются через CMake, для GUI-приложений используется raylib.


Модули

fsm — Конечные автоматы

Основной модуль проекта. Каждый автомат реализован как независимый модуль с функциями 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.

pneumo_ctrl — Пневматический контроллер

Конечный автомат управления пневматическим цилиндром. Поддерживает таймауты и задержки между состояниями.

turing — Машина Тьюринга

Полная реализация машины Тьюринга:

  • Лента ограничена 30 ячейками
  • Таблица переходов задаётся в коде
  • Поддержка произвольных алфавитов символов и состояний
  • Включены прямые реализации конкретных вычислений (turing_direct_*.c)

game_life — Игра «Жизнь»

Клеточный автомат Конвея с GUI-визуализацией:

  • Настраиваемый размер сетки
  • Предустановленные паттерны: глайдер, вирус, кошка и другие (sample-*.txt)
  • Анимированная отрисовка через raylib

clever_ant — Искусственный муравей

Симуляция фуражировки на основе генетического программирования (по материалам EP93.pdf):

  • Сетка 32×32 (тор)
  • 5-состояниевый автомат поведения муравья
  • Муравей собирает 89 «яблок»
  • Движение: UP / RIGHT / DOWN / LEFT

chess — Шахматы

Шахматная игра с графическим интерфейсом (raylib). Включает рендер доски, фигур и игровую логику.

forth — Интерпретатор Forth

Виртуальная машина языка Forth. Базовые слова словаря и стековые операции.

math_lang — Парсер математических выражений

Лексер и парсер арифметических выражений:

  • Целые и вещественные числа
  • Операторы: +, -, *, /, ^ (возведение в степень)
  • Функции: tg (тангенс) и другие
  • Поддержка разбора из файла и строки

regexp — Регулярные выражения

Реализации конечных автоматов для сопоставления с образцом:

  • regexp_nums_1/2 — числовые паттерны
  • regexp_isbn — валидация ISBN
  • regexp_tags — разметка / теги

microc — Интерпретатор Micro C

Интерпретатор подмножества языка C.

common — Общие утилиты

Разделяемая библиотека:

  • Матричные операции (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

About

Практика по ОТКА

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors