forked from modelica/ModelicaSpecification
/
B22_class_definition.g
95 lines (76 loc) · 1.83 KB
/
B22_class_definition.g
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
parser grammar B22_class_definition;
// Class Definition
start_rule: class_definition;
class_definition :
'encapsulated'? class_prefixes
class_specifier
;
class_prefixes :
'partial'?
( 'class' | 'model' | 'operator'? 'record' | 'block' | 'expandable'? 'connector' |
'type' | 'package' | ( 'pure' | 'impure' )? 'operator'? 'function' | 'operator' )
;
class_specifier :
long_class_specifier | short_class_specifier | der_class_specifier
;
long_class_specifier :
IDENT string_comment composition 'end' IDENT
| 'extends' IDENT class_modification? string_comment composition
'end' IDENT
;
short_class_specifier
: IDENT '='
(
base_prefix type_specifier array_subscripts? class_modification?
| 'enumeration' '(' ( enum_list? | ':' ) ')'
)
comment
;
der_class_specifier :
IDENT '=' 'der' '(' type_specifier ',' IDENT ( ',' IDENT )* ')' comment
base_prefix
: ( 'input' | 'output' )?
;
enum_list :
enumeration_literal ( ',' enumeration_literal )*
;
enumeration_literal :
IDENT comment
;
composition :
element_list
( 'public' element_list |
'protected' element_list |
equation_section |
algorithm_section
)*
( 'external' language_specification
external_function_call? annotation_comment? ';' )?
( annotation_comment ';' )?
;
language_specification :
STRING
;
external_function_call :
( component_reference '=' )?
IDENT '(' expression_list? ')'
;
element_list :
( element ';' )*
;
element :
import_clause |
extends_clause |
'redeclare'?
'final'?
'inner'? 'outer'?
( ( class_definition | component_clause) |
'replaceable' ( class_definition | component_clause )
(constraining_clause comment)? )
;
import_clause :
'import' ( IDENT '=' name | name ('.' ( '*' | '{' import_list '}' ) | '.*')? ) comment
;
import_list :
IDENT ( ',' IDENT )*
;