/
grammar.ebnf
121 lines (101 loc) · 2.8 KB
/
grammar.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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
start: "@startuml" (skinparam | class | relationship)* "@enduml"
// Skinparam
skinparam: "skinparam" sparam svalue
// Classes
class: "class" class_name stereotype? ("{" (class_group_title? (attribute | method) class_group_title?)* "}")?
| class_name ":" (attribute | method)?
// Stereotype
stereotype: "<<" stereotype_name ">>"
// Sections with title
class_group_title: ".." (group_title "..")?
| "--" (group_title "--")?
| "__" (group_title "__")?
| "=="
// Variables
variable: var ":" type
| var ":" type "[]"
| var ":" type "*"
| type var
| type "[]" var
| type "*" var
| type
| var
text_field: "{field}" field_text
?attribute: att_scope? visibility? variable
| visibility? att_scope? variable
| att_scope? visibility? text_field
| visibility? att_scope? text_field
param_list: [variable ("," variable)*]
function: method_name "(" param_list ")" ":" type
| type method_name "(" param_list ")"
text_method: "{method}" method_text
method: att_scope? visibility? function
| visibility? att_scope? function
| att_scope? visibility? text_method
| visibility? att_scope? text_method
// Attribute Scope
att_scope: "{static}" -> static
| "{abstract}" -> abstract
// Relationships
relationship: arrow_end_1 cardinality? arrow_head_1 arrow_body arrow_head_2 cardinality? arrow_end_2 [":" relation_text]
// Arrow Heads
!arrow_head_1: "<"
| "<|"
| "*"
| "o"
| "+"
| "#"
| "x"
| "}"
| "^"
| " "
!arrow_head_2: ">"
| "|>"
| "*"
| "o"
| "+"
| "#"
| "x"
| "}"
| "^"
| " "
!arrow_body: ("-"
| "--"
| "---"
| "-left-"
| "-up-"
| "-right-"
| "-down-"
| "."
| ".."
| ".left."
| ".up."
| ".right."
| ".down." )
cardinality: ESCAPED_STRING
// Variables and Methods visibility
visibility: "+" -> public
| "-" -> private
| "#" -> protected
| "~" -> package
arrow_end_1: CNAME
arrow_end_2: CNAME
type: CNAME
var: CNAME
sparam: CNAME
svalue: CNAME|WORD|ESCAPED_STRING|DIGIT
attribute_name: CNAME
method_name: CNAME
class_name: CNAME
stereotype_name: CNAME
relation_text: (WORD|ESCAPED_STRING|DIGIT|">"|"<")*
field_text: (WORD|ESCAPED_STRING|DIGIT)*
method_text: (WORD|ESCAPED_STRING|DIGIT)*
class_mem_text: (WORD|ESCAPED_STRING|DIGIT)*
group_title: (WORD|ESCAPED_STRING|DIGIT)*
%import common.CNAME
%import common.ESCAPED_STRING
%import common.WORD
%import common.DIGIT
%import common.WS
%ignore WS