===== Кейс 015: Язык описания состояний (gram:case-015) ===== === Общая информация === ^ Уровень сложности ^ 🔴 Экспертный ^ ^ Рекомендуемые языки ^ Java, C++ ^ ^ Основные инструменты ^ ANTLR4 ^ ^ Предметная область ^ Информатика, автоматное программирование ^ === Описание кейса === Язык для описания конечных автоматов и систем с состояниями, включая генерацию кода и визуализацию диаграмм состояний. === Грамматика языка === // Лексемы STATEMACHINE : 'statemachine' STATE : 'state' INITIAL : 'initial' FINAL : 'final' TRANSITION : 'transition' ON : 'on' DO : 'do' GUARD : 'guard' ACTION : 'action' LBRACE : '{' RBRACE : '}' COLON : ':' ARROW : '->' COMMA : ',' STRING : '"' (~["\\] | '\\' .)* '"' ID : [a-zA-Z_][a-zA-Z_0-9]* WS : [ \t\r\n]+ -> skip // Синтаксис statemachine : STATEMACHINE ID LBRACE machine_content RBRACE machine_content: states transitions states : state+ state : STATE ID state_type? LBRACE state_content RBRACE state_type : INITIAL | FINAL state_content: (entry_action | exit_action | do_action)* entry_action : ENTRY COLON action exit_action : EXIT COLON action do_action : DO COLON action transitions : transition+ transition : TRANSITION ID ARROW ID ON event guard? action? event : ID guard : GUARD COLON condition action : ACTION COLON action_expression condition : expression comparison expression expression : term ( (PLUS | MINUS) term )* term : factor ( (MUL | DIV) factor )* factor : NUMBER | ID | LPAREN expression RPAREN action_expression : ID LPAREN param_list? RPAREN param_list : param (COMMA param)* param : STRING | NUMBER | ID === План лабораторных работ === ==== ЛР1: Лексический анализ ==== **Задачи:** - Распознавание элементов автоматов - Поддержка событий и действий - Обработка условий переходов ==== ЛР2: Синтаксический анализ ==== **Задачи:** - Парсер описаний конечных автоматов - Построение AST системы состояний - Валидация переходов и условий ==== ЛР3: Семантический анализ ==== **Задачи:** - Проверка достижимости состояний - Анализа детерминированности - Валидация завершаемости ==== ЛР4: Генерация кода и визуализация ==== **Задачи:** - Генерация кода на целевом языке - Создание диаграмм состояний - Тестирование поведения автомата === Пример автомата === statemachine TrafficLight { state Red initial { entry: start_timer(30) exit: stop_timer() } state Yellow { entry: start_timer(5) } state Green final { entry: start_timer(30) } transitions Red -> Green on timeout Green -> Yellow on timeout Yellow -> Red on timeout } === Педагогическое применение === **Использование в школе:** - Обучение автоматному программированию - Визуализация алгоритмов - Разработка управляющих систем ---- [[gram:labs|← К списку]] | [[gram:case-014|← 014]] | [[gram:case-016|016 →]]