-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathStateMachine.g4
More file actions
50 lines (35 loc) · 1.07 KB
/
StateMachine.g4
File metadata and controls
50 lines (35 loc) · 1.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
grammar StateMachine;
import simple_arithmetic;
/* Lexer rules */
fragment LOWERCASE: [a-z];
fragment UPPERCASE: [A-Z];
STATEMACHINE: 'StateMachine';
STATE: 'state';
COMPOSITE_STATE: 'composite state';
TRANSITION_SYMBOL: '->';
INITIAL: 'INITIAL';
FINAL: 'FINAL';
TEXT: '\'' (UPPERCASE | LOWERCASE)+ '\'';
NAME: UPPERCASE (LOWERCASE | UPPERCASE)*;
NOT_EQ: '!=';
INF: '<';
INF_EQ: '<=';
SUP: '>';
SUP_EQ: '>=';
WS: [ \t\r\n] -> skip;
/* Parser rules */
statemachine:
STATEMACHINE NAME '{' initial_state states += state_rule+ '}' EOF;
composite_state:
COMPOSITE_STATE NAME '{' transitions += transition* (
initial_state states += state_rule+
)? '}';
simple_state: STATE NAME '{' transitions += transition* '}';
state_rule: (simple_state | composite_state);
initial_state: INITIAL TRANSITION_SYMBOL target = NAME ';';
transition:
TRANSITION_SYMBOL target = (NAME | FINAL) ':' input = TEXT
('[' guard ']')?
('/' '{' assignments += separated_assignment* '}')? ';';
guard: variable (EQ | NOT_EQ | INF | INF_EQ | SUP | SUP_EQ) expression;
separated_assignment: assignment ';';