| Уровень сложности | 🔴 Экспертный |
|---|---|
| Рекомендуемые языки | 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
Задачи:
Задачи:
Задачи:
Задачи:
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
}
Использование в школе:
← К списку | ← 014 | 016 →