Table of Contents

Кейс 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: Лексический анализ

Задачи:

  1. Распознавание элементов автоматов
  2. Поддержка событий и действий
  3. Обработка условий переходов

ЛР2: Синтаксический анализ

Задачи:

  1. Парсер описаний конечных автоматов
  2. Построение AST системы состояний
  3. Валидация переходов и условий

ЛР3: Семантический анализ

Задачи:

  1. Проверка достижимости состояний
  2. Анализа детерминированности
  3. Валидация завершаемости

ЛР4: Генерация кода и визуализация

Задачи:

  1. Генерация кода на целевом языке
  2. Создание диаграмм состояний
  3. Тестирование поведения автомата

Пример автомата

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
}

Педагогическое применение

Использование в школе:

  1. Обучение автоматному программированию
  2. Визуализация алгоритмов
  3. Разработка управляющих систем

← К списку | ← 014 | 016 →