===== Кейс 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 →]]