-
Notifications
You must be signed in to change notification settings - Fork 0
/
uc.ebnf
71 lines (48 loc) · 2.49 KB
/
uc.ebnf
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
/* TODO: между токенами можно убрать пробелы? */
/* Иструмент: https://bnfplayground.pauliankline.com/ */
/* Общие */
/* ----------------------------------------------------------------------- */
/* элементарные (или встроенные) конструкции */
<whs> ::= " "
<nln> ::= "\n"
/* допустимые значения для типа char, не только: */
<any_char> ::= ([A-Z] | [a-z] | [0-9] | "_")+
/* допустимые для идентификатора значения PlantUML: */
<ids_char> ::= ([A-Z] | [a-z] | [0-9] | "_")+
/* --- */
<string> ::= <any_char>+
<node_id> ::= <ids_char>+
<optwhs> ::= <whs>*
<reqwhs> ::= <whs>+
<end_curly_brace> ::= "}"
/* Uc */
/* ----------------------------------------------------------------------- */
/* стрелка */
<left_arrow_head> ::= "<" | "<|"
<rght_arrow_head> ::= ">" | "|>"
<arrow_direction> ::= ("l" | "r" | "d" | "u") | ("left" | "right" | "down" | "up")
<arrow_body> ::= ("." | "-")+ <arrow_direction> ("." | "-")+
<arrow> ::= <left_arrow_head>? <arrow_body> <rght_arrow_head>?
/* составные конструкции (не используются напрямую) */
<part_whole_node> ::= "\"" <string> "\"" <reqwhs> "as" <reqwhs> <node_id>
<usecase_id> ::= "(" <string> ")"
<actor_id> ::= ":" <string> ":"
<node> ::= (<usecase_id> | <actor_id> | <node_id>)
/* составные конструкции (то из чего состоит диаграмма/то что вводит пользователь) */
<enduml> ::= "@enduml"
<startuml> ::= "@startuml"
<directive> ::= <startuml> | <enduml>
/* --- */
<actor_short_node> ::= <actor_id> <reqwhs> "as" <reqwhs> <node_id>
<actor_whole_node> ::= "actor" <reqwhs> (<actor_short_node> | <part_whole_node>)
<actor_node> ::= (<actor_short_node> | <actor_whole_node>)
<usecase_short_node> ::= <usecase_id> <reqwhs> "as" <reqwhs> <node_id>
<usecase_whole_node> ::= "usecase" <reqwhs> (<usecase_short_node> | <part_whole_node>)
<usecase_node> ::= (<usecase_short_node> | <usecase_whole_node>)
/* --- */
<connection> ::= <node> <reqwhs> <arrow> <reqwhs> <node>
/* --- */
<beg_grouping> ::= ("rectangle" | "package") <reqwhs> "{"
<grouping> ::= <beg_grouping> <nln> ((<actor_node> | <usecase_node> | <connection>) <nln>)* <nln> <end_curly_brace>
/* --- */
<diagram> ::= <startuml> <nln> ((<actor_node> | <usecase_node> | <connection> | <grouping>) <nln>)* <enduml>