expressir 1.0.0-x86-mingw32 → 1.1.0-x86-mingw32
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.yardopts +11 -0
- data/Rakefile +3 -0
- data/expressir.gemspec +3 -0
- data/lib/expressir/express/2.4/express_parser.so +0 -0
- data/lib/expressir/express/2.5/express_parser.so +0 -0
- data/lib/expressir/express/2.6/express_parser.so +0 -0
- data/lib/expressir/express/2.7/express_parser.so +0 -0
- data/lib/expressir/express/3.0/express_parser.so +0 -0
- data/lib/expressir/express/cache.rb +16 -10
- data/lib/expressir/express/formatter.rb +231 -180
- data/lib/expressir/express/hyperlink_formatter.rb +15 -1
- data/lib/expressir/express/model_visitor.rb +1 -0
- data/lib/expressir/express/parser.rb +16 -10
- data/lib/expressir/express/resolve_references_model_visitor.rb +7 -5
- data/lib/expressir/express/schema_head_formatter.rb +16 -2
- data/lib/expressir/express/visitor.rb +280 -254
- data/lib/expressir/model.rb +52 -45
- data/lib/expressir/model/cache.rb +6 -2
- data/lib/expressir/model/data_type.rb +9 -0
- data/lib/expressir/model/data_types/aggregate.rb +31 -0
- data/lib/expressir/model/data_types/array.rb +31 -0
- data/lib/expressir/model/data_types/bag.rb +25 -0
- data/lib/expressir/model/data_types/binary.rb +22 -0
- data/lib/expressir/model/data_types/boolean.rb +10 -0
- data/lib/expressir/model/data_types/enumeration.rb +25 -0
- data/lib/expressir/model/data_types/enumeration_item.rb +26 -0
- data/lib/expressir/model/data_types/generic.rb +26 -0
- data/lib/expressir/model/data_types/generic_entity.rb +26 -0
- data/lib/expressir/model/data_types/integer.rb +10 -0
- data/lib/expressir/model/data_types/list.rb +28 -0
- data/lib/expressir/model/data_types/logical.rb +10 -0
- data/lib/expressir/model/data_types/number.rb +10 -0
- data/lib/expressir/model/data_types/real.rb +19 -0
- data/lib/expressir/model/data_types/select.rb +28 -0
- data/lib/expressir/model/data_types/set.rb +25 -0
- data/lib/expressir/model/data_types/string.rb +22 -0
- data/lib/expressir/model/declaration.rb +9 -0
- data/lib/expressir/model/declarations/attribute.rb +47 -0
- data/lib/expressir/model/declarations/constant.rb +34 -0
- data/lib/expressir/model/declarations/entity.rb +53 -0
- data/lib/expressir/model/declarations/function.rb +67 -0
- data/lib/expressir/model/declarations/interface.rb +28 -0
- data/lib/expressir/model/declarations/interface_item.rb +23 -0
- data/lib/expressir/model/declarations/interfaced_item.rb +37 -0
- data/lib/expressir/model/declarations/parameter.rb +34 -0
- data/lib/expressir/model/declarations/procedure.rb +64 -0
- data/lib/expressir/model/declarations/remark_item.rb +21 -0
- data/lib/expressir/model/declarations/rule.rb +71 -0
- data/lib/expressir/model/declarations/schema.rb +117 -0
- data/lib/expressir/model/declarations/schema_version.rb +22 -0
- data/lib/expressir/model/declarations/schema_version_item.rb +22 -0
- data/lib/expressir/model/declarations/subtype_constraint.rb +40 -0
- data/lib/expressir/model/declarations/type.rb +45 -0
- data/lib/expressir/model/declarations/unique_rule.rb +31 -0
- data/lib/expressir/model/declarations/variable.rb +34 -0
- data/lib/expressir/model/declarations/where_rule.rb +31 -0
- data/lib/expressir/model/expression.rb +9 -0
- data/lib/expressir/model/expressions/aggregate_initializer.rb +6 -2
- data/lib/expressir/model/expressions/aggregate_initializer_item.rb +22 -0
- data/lib/expressir/model/expressions/binary_expression.rb +16 -5
- data/lib/expressir/model/expressions/entity_constructor.rb +8 -3
- data/lib/expressir/model/expressions/function_call.rb +22 -0
- data/lib/expressir/model/expressions/interval.rb +17 -6
- data/lib/expressir/model/expressions/query_expression.rb +11 -7
- data/lib/expressir/model/expressions/unary_expression.rb +9 -3
- data/lib/expressir/model/identifier.rb +26 -4
- data/lib/expressir/model/literal.rb +9 -0
- data/lib/expressir/model/literals/binary.rb +6 -2
- data/lib/expressir/model/literals/integer.rb +6 -2
- data/lib/expressir/model/literals/logical.rb +6 -2
- data/lib/expressir/model/literals/real.rb +6 -2
- data/lib/expressir/model/literals/string.rb +8 -3
- data/lib/expressir/model/model_element.rb +63 -37
- data/lib/expressir/model/reference.rb +9 -0
- data/lib/expressir/model/references/attribute_reference.rb +22 -0
- data/lib/expressir/model/references/group_reference.rb +22 -0
- data/lib/expressir/model/references/index_reference.rb +27 -0
- data/lib/expressir/model/references/simple_reference.rb +24 -0
- data/lib/expressir/model/repository.rb +7 -1
- data/lib/expressir/model/statement.rb +9 -0
- data/lib/expressir/model/statements/alias.rb +11 -7
- data/lib/expressir/model/statements/assignment.rb +8 -3
- data/lib/expressir/model/statements/case.rb +10 -4
- data/lib/expressir/model/statements/case_action.rb +7 -2
- data/lib/expressir/model/statements/compound.rb +6 -2
- data/lib/expressir/model/statements/escape.rb +3 -1
- data/lib/expressir/model/statements/if.rb +10 -4
- data/lib/expressir/model/statements/null.rb +3 -1
- data/lib/expressir/model/statements/procedure_call.rb +22 -0
- data/lib/expressir/model/statements/repeat.rb +19 -11
- data/lib/expressir/model/statements/return.rb +6 -2
- data/lib/expressir/model/statements/skip.rb +3 -1
- data/lib/expressir/model/supertype_expression.rb +9 -0
- data/lib/expressir/model/supertype_expressions/binary_supertype_expression.rb +29 -0
- data/lib/expressir/model/supertype_expressions/oneof_supertype_expression.rb +19 -0
- data/lib/expressir/version.rb +1 -1
- data/spec/expressir/model/model_element_spec.rb +131 -131
- data/spec/syntax/multiple.yaml +68 -68
- data/spec/syntax/remark.yaml +64 -64
- data/spec/syntax/single.yaml +5 -5
- data/spec/syntax/single_formatted.yaml +5 -5
- data/spec/syntax/syntax.yaml +1003 -1030
- metadata +97 -45
- data/lib/expressir/model/attribute.rb +0 -38
- data/lib/expressir/model/constant.rb +0 -28
- data/lib/expressir/model/entity.rb +0 -42
- data/lib/expressir/model/enumeration_item.rb +0 -22
- data/lib/expressir/model/expressions/aggregate_item.rb +0 -17
- data/lib/expressir/model/expressions/attribute_reference.rb +0 -17
- data/lib/expressir/model/expressions/call.rb +0 -17
- data/lib/expressir/model/expressions/group_reference.rb +0 -17
- data/lib/expressir/model/expressions/index_reference.rb +0 -19
- data/lib/expressir/model/expressions/simple_reference.rb +0 -19
- data/lib/expressir/model/function.rb +0 -57
- data/lib/expressir/model/interface.rb +0 -20
- data/lib/expressir/model/interface_item.rb +0 -15
- data/lib/expressir/model/interfaced_item.rb +0 -27
- data/lib/expressir/model/parameter.rb +0 -28
- data/lib/expressir/model/procedure.rb +0 -55
- data/lib/expressir/model/remark_item.rb +0 -15
- data/lib/expressir/model/rule.rb +0 -60
- data/lib/expressir/model/schema.rb +0 -100
- data/lib/expressir/model/schema_version.rb +0 -15
- data/lib/expressir/model/schema_version_item.rb +0 -15
- data/lib/expressir/model/statements/call.rb +0 -17
- data/lib/expressir/model/subtype_constraint.rb +0 -32
- data/lib/expressir/model/type.rb +0 -37
- data/lib/expressir/model/types/aggregate.rb +0 -28
- data/lib/expressir/model/types/array.rb +0 -23
- data/lib/expressir/model/types/bag.rb +0 -19
- data/lib/expressir/model/types/binary.rb +0 -17
- data/lib/expressir/model/types/boolean.rb +0 -8
- data/lib/expressir/model/types/enumeration.rb +0 -19
- data/lib/expressir/model/types/generic.rb +0 -24
- data/lib/expressir/model/types/generic_entity.rb +0 -24
- data/lib/expressir/model/types/integer.rb +0 -8
- data/lib/expressir/model/types/list.rb +0 -21
- data/lib/expressir/model/types/logical.rb +0 -8
- data/lib/expressir/model/types/number.rb +0 -8
- data/lib/expressir/model/types/real.rb +0 -15
- data/lib/expressir/model/types/select.rb +0 -21
- data/lib/expressir/model/types/set.rb +0 -19
- data/lib/expressir/model/types/string.rb +0 -17
- data/lib/expressir/model/unique_rule.rb +0 -26
- data/lib/expressir/model/variable.rb +0 -28
- data/lib/expressir/model/where_rule.rb +0 -26
@@ -1,7 +1,21 @@
|
|
1
1
|
module Expressir
|
2
2
|
module Express
|
3
|
+
# Formatter module - format references as hyperlinks
|
4
|
+
# @example Include into Formatter subclass
|
5
|
+
# formatter = Class.new(Expressir::Express::Formatter) do
|
6
|
+
# include Expressir::Express::HyperlinkFormatter
|
7
|
+
# end
|
3
8
|
module HyperlinkFormatter
|
4
|
-
|
9
|
+
# @!visibility private
|
10
|
+
def self.included(mod)
|
11
|
+
if !mod.superclass.private_method_defined? :format_references_simple_reference
|
12
|
+
raise 'Missing method'
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def format_references_simple_reference(node)
|
5
19
|
return node.id unless node.base_path
|
6
20
|
|
7
21
|
# find closest node with path
|
@@ -25,16 +25,19 @@ repo = visitor.visit(parse_tree)
|
|
25
25
|
module Expressir
|
26
26
|
module Express
|
27
27
|
class Parser
|
28
|
-
|
29
|
-
|
30
|
-
|
28
|
+
# Parses Express file into an Express model
|
29
|
+
# @param [String] file Express file path
|
30
|
+
# @param [Boolean] skip_references skip resolving references
|
31
|
+
# @param [Boolean] include_source attach original source code to model elements
|
32
|
+
# @return [Model::Repository]
|
33
|
+
def self.from_file(file, skip_references: nil, include_source: nil)
|
31
34
|
input = File.read(file)
|
32
35
|
|
33
36
|
parser = ::ExpressParser::Parser.parse(input)
|
34
37
|
|
35
38
|
parse_tree = parser.syntax()
|
36
39
|
|
37
|
-
visitor = Visitor.new(parser.tokens,
|
40
|
+
visitor = Visitor.new(parser.tokens, include_source: include_source)
|
38
41
|
repository = visitor.visit(parse_tree)
|
39
42
|
|
40
43
|
repository.schemas.each do |schema|
|
@@ -49,19 +52,22 @@ module Expressir
|
|
49
52
|
repository
|
50
53
|
end
|
51
54
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
+
# Parses Express files into an Express model
|
56
|
+
# @param [Array<String>] files Express file paths
|
57
|
+
# @param [Boolean] skip_references skip resolving references
|
58
|
+
# @param [Boolean] include_source attach original source code to model elements
|
59
|
+
# @return [Model::Repository]
|
60
|
+
def self.from_files(files, skip_references: nil, include_source: nil)
|
55
61
|
schemas = files.each_with_index.map do |file, i|
|
56
62
|
# start = Time.now
|
57
|
-
repository = self.from_file(file,
|
63
|
+
repository = self.from_file(file, skip_references: true)
|
58
64
|
# STDERR.puts "#{i+1}/#{files.length} #{file} #{Time.now - start}"
|
59
65
|
repository.schemas
|
60
66
|
end.flatten
|
61
67
|
|
62
|
-
repository = Model::Repository.new(
|
68
|
+
repository = Model::Repository.new(
|
63
69
|
schemas: schemas
|
64
|
-
|
70
|
+
)
|
65
71
|
|
66
72
|
unless skip_references
|
67
73
|
resolve_references_model_visitor = ResolveReferencesModelVisitor.new
|
@@ -5,17 +5,19 @@ module Expressir
|
|
5
5
|
module Express
|
6
6
|
class ResolveReferencesModelVisitor < ModelVisitor
|
7
7
|
def visit(node)
|
8
|
-
if node.is_a? Model::
|
9
|
-
|
8
|
+
if node.is_a? Model::References::SimpleReference
|
9
|
+
visit_references_simple_reference(node)
|
10
10
|
end
|
11
11
|
|
12
12
|
super
|
13
13
|
end
|
14
14
|
|
15
|
-
|
16
|
-
return if node.parent.is_a? Model::Expressions::AttributeReference
|
15
|
+
private
|
17
16
|
|
18
|
-
|
17
|
+
def visit_references_simple_reference(node)
|
18
|
+
return if node.parent.is_a? Model::References::AttributeReference
|
19
|
+
|
20
|
+
if node.parent.is_a? Model::Declarations::InterfaceItem
|
19
21
|
base_item = node.find("#{node.parent.parent.schema.id}.#{node.parent.ref.id}")
|
20
22
|
else
|
21
23
|
base_item = node.find(node.id)
|
@@ -1,8 +1,22 @@
|
|
1
1
|
module Expressir
|
2
2
|
module Express
|
3
|
+
# Formatter module - format schema as schema head only
|
4
|
+
# @example Include into Formatter subclass
|
5
|
+
# formatter = Class.new(Expressir::Express::Formatter) do
|
6
|
+
# include Expressir::Express::SchemaHeadFormatter
|
7
|
+
# end
|
3
8
|
module SchemaHeadFormatter
|
4
|
-
|
5
|
-
|
9
|
+
# @!visibility private
|
10
|
+
def self.included(mod)
|
11
|
+
if !mod.superclass.private_method_defined? :format_declarations_schema or !mod.superclass.private_method_defined? :format_declarations_schema_head
|
12
|
+
raise 'Missing method'
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def format_declarations_schema(node)
|
19
|
+
format_declarations_schema_head(node)
|
6
20
|
end
|
7
21
|
end
|
8
22
|
end
|
@@ -16,7 +16,7 @@ require "set"
|
|
16
16
|
# > for example.
|
17
17
|
# - such multi-pass parsing is not implemented yet
|
18
18
|
# - xxxRef - merged to SimpleReference
|
19
|
-
# - entityConstructor, functionCall - merged to
|
19
|
+
# - entityConstructor, functionCall - merged to FunctionCall
|
20
20
|
#
|
21
21
|
# difference between generalized and instantiable types is not recognized
|
22
22
|
# see note in 8.6.2 Parameter data types
|
@@ -36,9 +36,13 @@ module Expressir
|
|
36
36
|
class Visitor < ::ExpressParser::Visitor
|
37
37
|
REMARK_CHANNEL = 2
|
38
38
|
|
39
|
-
|
39
|
+
private_constant :REMARK_CHANNEL
|
40
|
+
|
41
|
+
# @param [Array<::ExpressParser::Token>] tokens
|
42
|
+
# @param [Boolean] include_source attach original source code to model elements
|
43
|
+
def initialize(tokens, include_source: nil)
|
40
44
|
@tokens = tokens
|
41
|
-
@include_source =
|
45
|
+
@include_source = include_source
|
42
46
|
|
43
47
|
@attached_remark_tokens = ::Set.new
|
44
48
|
|
@@ -54,6 +58,8 @@ module Expressir
|
|
54
58
|
node
|
55
59
|
end
|
56
60
|
|
61
|
+
private
|
62
|
+
|
57
63
|
def visit_if(ctx, default = nil)
|
58
64
|
if ctx
|
59
65
|
visit(ctx)
|
@@ -113,9 +119,9 @@ module Expressir
|
|
113
119
|
_, _, current_path = current_path.rpartition(":") # ignore prefix
|
114
120
|
parent_node = node.find(rest)
|
115
121
|
if parent_node and parent_node.class.method_defined? :remark_items
|
116
|
-
remark_item = Model::RemarkItem.new(
|
122
|
+
remark_item = Model::Declarations::RemarkItem.new(
|
117
123
|
id: current_path
|
118
|
-
|
124
|
+
)
|
119
125
|
remark_item.parent = parent_node
|
120
126
|
|
121
127
|
# check if path can create implicit informal proposition
|
@@ -170,9 +176,9 @@ module Expressir
|
|
170
176
|
|
171
177
|
id = visit_if(ctx__attribute_id)
|
172
178
|
|
173
|
-
Model::
|
179
|
+
Model::References::SimpleReference.new(
|
174
180
|
id: id
|
175
|
-
|
181
|
+
)
|
176
182
|
end
|
177
183
|
|
178
184
|
def visit_constant_ref(ctx)
|
@@ -180,9 +186,9 @@ module Expressir
|
|
180
186
|
|
181
187
|
id = visit_if(ctx__constant_id)
|
182
188
|
|
183
|
-
Model::
|
189
|
+
Model::References::SimpleReference.new(
|
184
190
|
id: id
|
185
|
-
|
191
|
+
)
|
186
192
|
end
|
187
193
|
|
188
194
|
def visit_entity_ref(ctx)
|
@@ -190,9 +196,9 @@ module Expressir
|
|
190
196
|
|
191
197
|
id = visit_if(ctx__entity_id)
|
192
198
|
|
193
|
-
Model::
|
199
|
+
Model::References::SimpleReference.new(
|
194
200
|
id: id
|
195
|
-
|
201
|
+
)
|
196
202
|
end
|
197
203
|
|
198
204
|
def visit_enumeration_ref(ctx)
|
@@ -200,9 +206,9 @@ module Expressir
|
|
200
206
|
|
201
207
|
id = visit_if(ctx__enumeration_id)
|
202
208
|
|
203
|
-
Model::
|
209
|
+
Model::References::SimpleReference.new(
|
204
210
|
id: id
|
205
|
-
|
211
|
+
)
|
206
212
|
end
|
207
213
|
|
208
214
|
def visit_function_ref(ctx)
|
@@ -210,9 +216,9 @@ module Expressir
|
|
210
216
|
|
211
217
|
id = visit_if(ctx__function_id)
|
212
218
|
|
213
|
-
Model::
|
219
|
+
Model::References::SimpleReference.new(
|
214
220
|
id: id
|
215
|
-
|
221
|
+
)
|
216
222
|
end
|
217
223
|
|
218
224
|
def visit_parameter_ref(ctx)
|
@@ -220,9 +226,9 @@ module Expressir
|
|
220
226
|
|
221
227
|
id = visit_if(ctx__parameter_id)
|
222
228
|
|
223
|
-
Model::
|
229
|
+
Model::References::SimpleReference.new(
|
224
230
|
id: id
|
225
|
-
|
231
|
+
)
|
226
232
|
end
|
227
233
|
|
228
234
|
def visit_procedure_ref(ctx)
|
@@ -230,9 +236,9 @@ module Expressir
|
|
230
236
|
|
231
237
|
id = visit_if(ctx__procedure_id)
|
232
238
|
|
233
|
-
Model::
|
239
|
+
Model::References::SimpleReference.new(
|
234
240
|
id: id
|
235
|
-
|
241
|
+
)
|
236
242
|
end
|
237
243
|
|
238
244
|
def visit_rule_label_ref(ctx)
|
@@ -240,9 +246,9 @@ module Expressir
|
|
240
246
|
|
241
247
|
id = visit_if(ctx__rule_label_id)
|
242
248
|
|
243
|
-
Model::
|
249
|
+
Model::References::SimpleReference.new(
|
244
250
|
id: id
|
245
|
-
|
251
|
+
)
|
246
252
|
end
|
247
253
|
|
248
254
|
def visit_rule_ref(ctx)
|
@@ -250,9 +256,9 @@ module Expressir
|
|
250
256
|
|
251
257
|
id = visit_if(ctx__rule_id)
|
252
258
|
|
253
|
-
Model::
|
259
|
+
Model::References::SimpleReference.new(
|
254
260
|
id: id
|
255
|
-
|
261
|
+
)
|
256
262
|
end
|
257
263
|
|
258
264
|
def visit_schema_ref(ctx)
|
@@ -260,9 +266,9 @@ module Expressir
|
|
260
266
|
|
261
267
|
id = visit_if(ctx__schema_id)
|
262
268
|
|
263
|
-
Model::
|
269
|
+
Model::References::SimpleReference.new(
|
264
270
|
id: id
|
265
|
-
|
271
|
+
)
|
266
272
|
end
|
267
273
|
|
268
274
|
def visit_subtype_constraint_ref(ctx)
|
@@ -270,9 +276,9 @@ module Expressir
|
|
270
276
|
|
271
277
|
id = visit_if(ctx__subtype_constraint_id)
|
272
278
|
|
273
|
-
Model::
|
279
|
+
Model::References::SimpleReference.new(
|
274
280
|
id: id
|
275
|
-
|
281
|
+
)
|
276
282
|
end
|
277
283
|
|
278
284
|
def visit_type_label_ref(ctx)
|
@@ -280,9 +286,9 @@ module Expressir
|
|
280
286
|
|
281
287
|
id = visit_if(ctx__type_label_id)
|
282
288
|
|
283
|
-
Model::
|
289
|
+
Model::References::SimpleReference.new(
|
284
290
|
id: id
|
285
|
-
|
291
|
+
)
|
286
292
|
end
|
287
293
|
|
288
294
|
def visit_type_ref(ctx)
|
@@ -290,9 +296,9 @@ module Expressir
|
|
290
296
|
|
291
297
|
id = visit_if(ctx__type_id)
|
292
298
|
|
293
|
-
Model::
|
299
|
+
Model::References::SimpleReference.new(
|
294
300
|
id: id
|
295
|
-
|
301
|
+
)
|
296
302
|
end
|
297
303
|
|
298
304
|
def visit_variable_ref(ctx)
|
@@ -300,9 +306,9 @@ module Expressir
|
|
300
306
|
|
301
307
|
id = visit_if(ctx__variable_id)
|
302
308
|
|
303
|
-
Model::
|
309
|
+
Model::References::SimpleReference.new(
|
304
310
|
id: id
|
305
|
-
|
311
|
+
)
|
306
312
|
end
|
307
313
|
|
308
314
|
def visit_abstract_entity_declaration(ctx)
|
@@ -350,9 +356,9 @@ module Expressir
|
|
350
356
|
|
351
357
|
items = visit_if_map(ctx__element)
|
352
358
|
|
353
|
-
Model::Expressions::AggregateInitializer.new(
|
359
|
+
Model::Expressions::AggregateInitializer.new(
|
354
360
|
items: items
|
355
|
-
|
361
|
+
)
|
356
362
|
end
|
357
363
|
|
358
364
|
def visit_aggregate_source(ctx)
|
@@ -368,10 +374,10 @@ module Expressir
|
|
368
374
|
id = visit_if(ctx__type_label)
|
369
375
|
base_type = visit_if(ctx__parameter_type)
|
370
376
|
|
371
|
-
Model::
|
377
|
+
Model::DataTypes::Aggregate.new(
|
372
378
|
id: id,
|
373
379
|
base_type: base_type
|
374
|
-
|
380
|
+
)
|
375
381
|
end
|
376
382
|
|
377
383
|
def visit_aggregation_types(ctx)
|
@@ -397,11 +403,11 @@ module Expressir
|
|
397
403
|
expression = handle_qualified_ref(visit_if(ctx__general_ref), ctx__qualifier)
|
398
404
|
statements = visit_if_map(ctx__stmt)
|
399
405
|
|
400
|
-
Model::Statements::Alias.new(
|
406
|
+
Model::Statements::Alias.new(
|
401
407
|
id: id,
|
402
408
|
expression: expression,
|
403
409
|
statements: statements
|
404
|
-
|
410
|
+
)
|
405
411
|
end
|
406
412
|
|
407
413
|
def visit_array_type(ctx)
|
@@ -418,13 +424,13 @@ module Expressir
|
|
418
424
|
unique = ctx__UNIQUE && true
|
419
425
|
base_type = visit_if(ctx__instantiable_type)
|
420
426
|
|
421
|
-
Model::
|
427
|
+
Model::DataTypes::Array.new(
|
422
428
|
bound1: bound1,
|
423
429
|
bound2: bound2,
|
424
430
|
optional: optional,
|
425
431
|
unique: unique,
|
426
432
|
base_type: base_type
|
427
|
-
|
433
|
+
)
|
428
434
|
end
|
429
435
|
|
430
436
|
def visit_assignment_stmt(ctx)
|
@@ -435,10 +441,10 @@ module Expressir
|
|
435
441
|
ref = handle_qualified_ref(visit_if(ctx__general_ref), ctx__qualifier)
|
436
442
|
expression = visit_if(ctx__expression)
|
437
443
|
|
438
|
-
Model::Statements::Assignment.new(
|
444
|
+
Model::Statements::Assignment.new(
|
439
445
|
ref: ref,
|
440
446
|
expression: expression
|
441
|
-
|
447
|
+
)
|
442
448
|
end
|
443
449
|
|
444
450
|
def visit_attribute_decl(ctx)
|
@@ -450,10 +456,10 @@ module Expressir
|
|
450
456
|
id = visit_if(ctx__attribute_id || ctx__redeclared_attribute__attribute_id)
|
451
457
|
supertype_attribute = visit_if(ctx__redeclared_attribute__qualified_attribute)
|
452
458
|
|
453
|
-
Model::Attribute.new(
|
459
|
+
Model::Declarations::Attribute.new(
|
454
460
|
id: id,
|
455
461
|
supertype_attribute: supertype_attribute
|
456
|
-
|
462
|
+
)
|
457
463
|
end
|
458
464
|
|
459
465
|
def visit_attribute_id(ctx)
|
@@ -467,9 +473,9 @@ module Expressir
|
|
467
473
|
|
468
474
|
attribute = visit_if(ctx__attribute_ref)
|
469
475
|
|
470
|
-
Model::
|
476
|
+
Model::References::AttributeReference.new(
|
471
477
|
attribute: attribute
|
472
|
-
|
478
|
+
)
|
473
479
|
end
|
474
480
|
|
475
481
|
def visit_attribute_reference(ctx)
|
@@ -486,11 +492,11 @@ module Expressir
|
|
486
492
|
bound2 = visit_if(ctx__bound_spec__bound2)
|
487
493
|
base_type = visit_if(ctx__instantiable_type)
|
488
494
|
|
489
|
-
Model::
|
495
|
+
Model::DataTypes::Bag.new(
|
490
496
|
bound1: bound1,
|
491
497
|
bound2: bound2,
|
492
498
|
base_type: base_type
|
493
|
-
|
499
|
+
)
|
494
500
|
end
|
495
501
|
|
496
502
|
def visit_binary_type(ctx)
|
@@ -501,14 +507,14 @@ module Expressir
|
|
501
507
|
width = visit_if(ctx__width_spec__width)
|
502
508
|
fixed = ctx__width_spec__FIXED && true
|
503
509
|
|
504
|
-
Model::
|
510
|
+
Model::DataTypes::Binary.new(
|
505
511
|
width: width,
|
506
512
|
fixed: fixed
|
507
|
-
|
513
|
+
)
|
508
514
|
end
|
509
515
|
|
510
516
|
def visit_boolean_type(ctx)
|
511
|
-
Model::
|
517
|
+
Model::DataTypes::Boolean.new
|
512
518
|
end
|
513
519
|
|
514
520
|
def visit_bound1(ctx)
|
@@ -532,9 +538,9 @@ module Expressir
|
|
532
538
|
|
533
539
|
id = ctx__text
|
534
540
|
|
535
|
-
Model::
|
541
|
+
Model::References::SimpleReference.new(
|
536
542
|
id: id
|
537
|
-
|
543
|
+
)
|
538
544
|
end
|
539
545
|
|
540
546
|
def visit_built_in_function(ctx)
|
@@ -542,9 +548,9 @@ module Expressir
|
|
542
548
|
|
543
549
|
id = ctx__text
|
544
550
|
|
545
|
-
Model::
|
551
|
+
Model::References::SimpleReference.new(
|
546
552
|
id: id
|
547
|
-
|
553
|
+
)
|
548
554
|
end
|
549
555
|
|
550
556
|
def visit_built_in_procedure(ctx)
|
@@ -552,9 +558,9 @@ module Expressir
|
|
552
558
|
|
553
559
|
id = ctx__text
|
554
560
|
|
555
|
-
Model::
|
561
|
+
Model::References::SimpleReference.new(
|
556
562
|
id: id
|
557
|
-
|
563
|
+
)
|
558
564
|
end
|
559
565
|
|
560
566
|
def visit_case_action(ctx)
|
@@ -564,10 +570,10 @@ module Expressir
|
|
564
570
|
labels = visit_if_map(ctx__case_label)
|
565
571
|
statement = visit_if(ctx__stmt)
|
566
572
|
|
567
|
-
Model::Statements::CaseAction.new(
|
573
|
+
Model::Statements::CaseAction.new(
|
568
574
|
labels: labels,
|
569
575
|
statement: statement
|
570
|
-
|
576
|
+
)
|
571
577
|
end
|
572
578
|
|
573
579
|
def visit_case_label(ctx)
|
@@ -586,11 +592,11 @@ module Expressir
|
|
586
592
|
actions = visit_if_map_flatten(ctx__case_action)
|
587
593
|
otherwise_statement = visit_if(ctx__stmt)
|
588
594
|
|
589
|
-
Model::Statements::Case.new(
|
595
|
+
Model::Statements::Case.new(
|
590
596
|
expression: expression,
|
591
597
|
actions: actions,
|
592
598
|
otherwise_statement: otherwise_statement
|
593
|
-
|
599
|
+
)
|
594
600
|
end
|
595
601
|
|
596
602
|
def visit_compound_stmt(ctx)
|
@@ -598,9 +604,9 @@ module Expressir
|
|
598
604
|
|
599
605
|
statements = visit_if_map(ctx__stmt)
|
600
606
|
|
601
|
-
Model::Statements::Compound.new(
|
607
|
+
Model::Statements::Compound.new(
|
602
608
|
statements: statements
|
603
|
-
|
609
|
+
)
|
604
610
|
end
|
605
611
|
|
606
612
|
def visit_concrete_types(ctx)
|
@@ -620,11 +626,11 @@ module Expressir
|
|
620
626
|
type = visit_if(ctx__instantiable_type)
|
621
627
|
expression = visit_if(ctx__expression)
|
622
628
|
|
623
|
-
Model::Constant.new(
|
629
|
+
Model::Declarations::Constant.new(
|
624
630
|
id: id,
|
625
631
|
type: type,
|
626
632
|
expression: expression
|
627
|
-
|
633
|
+
)
|
628
634
|
end
|
629
635
|
|
630
636
|
def visit_constant_decl(ctx)
|
@@ -672,13 +678,13 @@ module Expressir
|
|
672
678
|
type = visit_if(ctx__parameter_type)
|
673
679
|
expression = visit_if(ctx__expression)
|
674
680
|
|
675
|
-
Model::Attribute.new(
|
681
|
+
Model::Declarations::Attribute.new(
|
676
682
|
id: attribute.id, # reuse
|
677
|
-
kind: Model::Attribute::DERIVED,
|
683
|
+
kind: Model::Declarations::Attribute::DERIVED,
|
678
684
|
supertype_attribute: attribute.supertype_attribute, # reuse
|
679
685
|
type: type,
|
680
686
|
expression: expression
|
681
|
-
|
687
|
+
)
|
682
688
|
end
|
683
689
|
|
684
690
|
def visit_derive_clause(ctx)
|
@@ -694,10 +700,10 @@ module Expressir
|
|
694
700
|
id = visit_if(ctx__rule_label_id)
|
695
701
|
expression = visit_if(ctx__expression)
|
696
702
|
|
697
|
-
Model::WhereRule.new(
|
703
|
+
Model::Declarations::WhereRule.new(
|
698
704
|
id: id,
|
699
705
|
expression: expression
|
700
|
-
|
706
|
+
)
|
701
707
|
end
|
702
708
|
|
703
709
|
def visit_element(ctx)
|
@@ -708,10 +714,10 @@ module Expressir
|
|
708
714
|
expression = visit_if(ctx__expression)
|
709
715
|
repetition = visit_if(ctx__repetition)
|
710
716
|
|
711
|
-
Model::Expressions::
|
717
|
+
Model::Expressions::AggregateInitializerItem.new(
|
712
718
|
expression: expression,
|
713
719
|
repetition: repetition
|
714
|
-
|
720
|
+
)
|
715
721
|
else
|
716
722
|
visit_if(ctx__expression)
|
717
723
|
end
|
@@ -725,13 +731,17 @@ module Expressir
|
|
725
731
|
ctx__entity_ref = ctx.entity_ref
|
726
732
|
ctx__expression = ctx.expression
|
727
733
|
|
728
|
-
|
734
|
+
entity = visit_if(ctx__entity_ref)
|
729
735
|
parameters = visit_if_map(ctx__expression)
|
730
736
|
|
731
|
-
Model::Expressions::
|
732
|
-
|
737
|
+
# Model::Expressions::EntityConstructor.new(
|
738
|
+
# entity: entity,
|
739
|
+
# parameters: parameters
|
740
|
+
# )
|
741
|
+
Model::Expressions::FunctionCall.new(
|
742
|
+
function: entity,
|
733
743
|
parameters: parameters
|
734
|
-
|
744
|
+
)
|
735
745
|
end
|
736
746
|
|
737
747
|
def visit_entity_decl(ctx)
|
@@ -762,7 +772,7 @@ module Expressir
|
|
762
772
|
unique_rules = visit_if(ctx__entity_body__unique_clause, [])
|
763
773
|
where_rules = visit_if(ctx__entity_body__where_clause, [])
|
764
774
|
|
765
|
-
Model::Entity.new(
|
775
|
+
Model::Declarations::Entity.new(
|
766
776
|
id: id,
|
767
777
|
abstract: abstract,
|
768
778
|
supertype_expression: supertype_expression,
|
@@ -770,7 +780,7 @@ module Expressir
|
|
770
780
|
attributes: attributes,
|
771
781
|
unique_rules: unique_rules,
|
772
782
|
where_rules: where_rules
|
773
|
-
|
783
|
+
)
|
774
784
|
end
|
775
785
|
|
776
786
|
def visit_entity_head(ctx)
|
@@ -804,9 +814,9 @@ module Expressir
|
|
804
814
|
|
805
815
|
id = visit_if(ctx__enumeration_id)
|
806
816
|
|
807
|
-
Model::EnumerationItem.new(
|
817
|
+
Model::DataTypes::EnumerationItem.new(
|
808
818
|
id: id
|
809
|
-
|
819
|
+
)
|
810
820
|
end
|
811
821
|
|
812
822
|
def visit_enumeration_reference(ctx)
|
@@ -817,10 +827,10 @@ module Expressir
|
|
817
827
|
ref = visit_if(ctx__type_ref)
|
818
828
|
attribute = visit_if(ctx__enumeration_ref)
|
819
829
|
|
820
|
-
Model::
|
830
|
+
Model::References::AttributeReference.new(
|
821
831
|
ref: ref,
|
822
832
|
attribute: attribute
|
823
|
-
|
833
|
+
)
|
824
834
|
else
|
825
835
|
visit_if(ctx__enumeration_ref)
|
826
836
|
end
|
@@ -837,11 +847,11 @@ module Expressir
|
|
837
847
|
based_on = visit_if(ctx__enumeration_extension__type_ref)
|
838
848
|
items = visit_if(ctx__enumeration_items || ctx__enumeration_extension__enumeration_items, [])
|
839
849
|
|
840
|
-
Model::
|
850
|
+
Model::DataTypes::Enumeration.new(
|
841
851
|
extensible: extensible,
|
842
852
|
based_on: based_on,
|
843
853
|
items: items
|
844
|
-
|
854
|
+
)
|
845
855
|
end
|
846
856
|
|
847
857
|
def visit_escape_stmt(ctx)
|
@@ -858,13 +868,13 @@ module Expressir
|
|
858
868
|
type = visit_if(ctx__parameter_type)
|
859
869
|
|
860
870
|
attributes.map do |attribute|
|
861
|
-
Model::Attribute.new(
|
871
|
+
Model::Declarations::Attribute.new(
|
862
872
|
id: attribute.id, # reuse
|
863
|
-
kind: Model::Attribute::EXPLICIT,
|
873
|
+
kind: Model::Declarations::Attribute::EXPLICIT,
|
864
874
|
supertype_attribute: attribute.supertype_attribute, # reuse
|
865
875
|
optional: optional,
|
866
876
|
type: type
|
867
|
-
|
877
|
+
)
|
868
878
|
end
|
869
879
|
end
|
870
880
|
|
@@ -877,11 +887,11 @@ module Expressir
|
|
877
887
|
operand1 = visit_if(ctx__simple_expression[0])
|
878
888
|
operand2 = visit_if(ctx__simple_expression[1])
|
879
889
|
|
880
|
-
Model::Expressions::BinaryExpression.new(
|
890
|
+
Model::Expressions::BinaryExpression.new(
|
881
891
|
operator: operator,
|
882
892
|
operand1: operand1,
|
883
893
|
operand2: operand2
|
884
|
-
|
894
|
+
)
|
885
895
|
else
|
886
896
|
visit_if(ctx__simple_expression[0])
|
887
897
|
end
|
@@ -895,11 +905,11 @@ module Expressir
|
|
895
905
|
operand1 = visit(ctx__simple_factor[0])
|
896
906
|
operand2 = visit(ctx__simple_factor[1])
|
897
907
|
|
898
|
-
Model::Expressions::BinaryExpression.new(
|
908
|
+
Model::Expressions::BinaryExpression.new(
|
899
909
|
operator: operator,
|
900
910
|
operand1: operand1,
|
901
911
|
operand2: operand2
|
902
|
-
|
912
|
+
)
|
903
913
|
elsif ctx__simple_factor.length == 1
|
904
914
|
visit_if(ctx__simple_factor[0])
|
905
915
|
else
|
@@ -915,10 +925,10 @@ module Expressir
|
|
915
925
|
type = visit_if(ctx__parameter_type)
|
916
926
|
|
917
927
|
ids.map do |id|
|
918
|
-
Model::Parameter.new(
|
928
|
+
Model::Declarations::Parameter.new(
|
919
929
|
id: id,
|
920
930
|
type: type
|
921
|
-
|
931
|
+
)
|
922
932
|
end
|
923
933
|
end
|
924
934
|
|
@@ -927,13 +937,13 @@ module Expressir
|
|
927
937
|
ctx__function_ref = ctx.function_ref
|
928
938
|
ctx__actual_parameter_list = ctx.actual_parameter_list
|
929
939
|
|
930
|
-
|
940
|
+
function = visit_if(ctx__built_in_function || ctx__function_ref)
|
931
941
|
parameters = visit_if(ctx__actual_parameter_list, [])
|
932
942
|
|
933
|
-
Model::Expressions::
|
934
|
-
|
943
|
+
Model::Expressions::FunctionCall.new(
|
944
|
+
function: function,
|
935
945
|
parameters: parameters
|
936
|
-
|
946
|
+
)
|
937
947
|
end
|
938
948
|
|
939
949
|
def visit_function_decl(ctx)
|
@@ -951,16 +961,16 @@ module Expressir
|
|
951
961
|
parameters = visit_if_map_flatten(ctx__function_head__formal_parameter)
|
952
962
|
return_type = visit_if(ctx__function_head__parameter_type)
|
953
963
|
declarations = visit_if_map(ctx__algorithm_head__declaration)
|
954
|
-
types = declarations.select{|x| x.is_a? Model::Type}
|
955
|
-
entities = declarations.select{|x| x.is_a? Model::Entity}
|
956
|
-
subtype_constraints = declarations.select{|x| x.is_a? Model::SubtypeConstraint}
|
957
|
-
functions = declarations.select{|x| x.is_a? Model::Function}
|
958
|
-
procedures = declarations.select{|x| x.is_a? Model::Procedure}
|
964
|
+
types = declarations.select{|x| x.is_a? Model::Declarations::Type}
|
965
|
+
entities = declarations.select{|x| x.is_a? Model::Declarations::Entity}
|
966
|
+
subtype_constraints = declarations.select{|x| x.is_a? Model::Declarations::SubtypeConstraint}
|
967
|
+
functions = declarations.select{|x| x.is_a? Model::Declarations::Function}
|
968
|
+
procedures = declarations.select{|x| x.is_a? Model::Declarations::Procedure}
|
959
969
|
constants = visit_if(ctx__algorithm_head__constant_decl, [])
|
960
970
|
variables = visit_if(ctx__algorithm_head__local_decl, [])
|
961
971
|
statements = visit_if_map(ctx__stmt)
|
962
972
|
|
963
|
-
Model::Function.new(
|
973
|
+
Model::Declarations::Function.new(
|
964
974
|
id: id,
|
965
975
|
parameters: parameters,
|
966
976
|
return_type: return_type,
|
@@ -972,7 +982,7 @@ module Expressir
|
|
972
982
|
constants: constants,
|
973
983
|
variables: variables,
|
974
984
|
statements: statements
|
975
|
-
|
985
|
+
)
|
976
986
|
end
|
977
987
|
|
978
988
|
def visit_function_head(ctx)
|
@@ -1017,13 +1027,13 @@ module Expressir
|
|
1017
1027
|
unique = ctx__UNIQUE && true
|
1018
1028
|
base_type = visit_if(ctx__parameter_type)
|
1019
1029
|
|
1020
|
-
Model::
|
1030
|
+
Model::DataTypes::Array.new(
|
1021
1031
|
bound1: bound1,
|
1022
1032
|
bound2: bound2,
|
1023
1033
|
optional: optional,
|
1024
1034
|
unique: unique,
|
1025
1035
|
base_type: base_type
|
1026
|
-
|
1036
|
+
)
|
1027
1037
|
end
|
1028
1038
|
|
1029
1039
|
def visit_general_bag_type(ctx)
|
@@ -1036,11 +1046,11 @@ module Expressir
|
|
1036
1046
|
bound2 = visit_if(ctx__bound_spec__bound2)
|
1037
1047
|
base_type = visit_if(ctx__parameter_type)
|
1038
1048
|
|
1039
|
-
Model::
|
1049
|
+
Model::DataTypes::Bag.new(
|
1040
1050
|
bound1: bound1,
|
1041
1051
|
bound2: bound2,
|
1042
1052
|
base_type: base_type
|
1043
|
-
|
1053
|
+
)
|
1044
1054
|
end
|
1045
1055
|
|
1046
1056
|
def visit_general_list_type(ctx)
|
@@ -1055,12 +1065,12 @@ module Expressir
|
|
1055
1065
|
unique = ctx__UNIQUE && true
|
1056
1066
|
base_type = visit_if(ctx__parameter_type)
|
1057
1067
|
|
1058
|
-
Model::
|
1068
|
+
Model::DataTypes::List.new(
|
1059
1069
|
bound1: bound1,
|
1060
1070
|
bound2: bound2,
|
1061
1071
|
unique: unique,
|
1062
1072
|
base_type: base_type
|
1063
|
-
|
1073
|
+
)
|
1064
1074
|
end
|
1065
1075
|
|
1066
1076
|
def visit_general_ref(ctx)
|
@@ -1080,11 +1090,11 @@ module Expressir
|
|
1080
1090
|
bound2 = visit_if(ctx__bound_spec__bound2)
|
1081
1091
|
base_type = visit_if(ctx__parameter_type)
|
1082
1092
|
|
1083
|
-
Model::
|
1093
|
+
Model::DataTypes::Set.new(
|
1084
1094
|
bound1: bound1,
|
1085
1095
|
bound2: bound2,
|
1086
1096
|
base_type: base_type
|
1087
|
-
|
1097
|
+
)
|
1088
1098
|
end
|
1089
1099
|
|
1090
1100
|
def visit_generic_entity_type(ctx)
|
@@ -1092,9 +1102,9 @@ module Expressir
|
|
1092
1102
|
|
1093
1103
|
id = visit_if(ctx__type_label)
|
1094
1104
|
|
1095
|
-
Model::
|
1105
|
+
Model::DataTypes::GenericEntity.new(
|
1096
1106
|
id: id
|
1097
|
-
|
1107
|
+
)
|
1098
1108
|
end
|
1099
1109
|
|
1100
1110
|
def visit_generic_type(ctx)
|
@@ -1102,9 +1112,9 @@ module Expressir
|
|
1102
1112
|
|
1103
1113
|
id = visit_if(ctx__type_label)
|
1104
1114
|
|
1105
|
-
Model::
|
1115
|
+
Model::DataTypes::Generic.new(
|
1106
1116
|
id: id
|
1107
|
-
|
1117
|
+
)
|
1108
1118
|
end
|
1109
1119
|
|
1110
1120
|
def visit_group_qualifier(ctx)
|
@@ -1112,9 +1122,9 @@ module Expressir
|
|
1112
1122
|
|
1113
1123
|
entity = visit_if(ctx__entity_ref)
|
1114
1124
|
|
1115
|
-
Model::
|
1125
|
+
Model::References::GroupReference.new(
|
1116
1126
|
entity: entity
|
1117
|
-
|
1127
|
+
)
|
1118
1128
|
end
|
1119
1129
|
|
1120
1130
|
def visit_group_reference(ctx)
|
@@ -1130,11 +1140,11 @@ module Expressir
|
|
1130
1140
|
statements = visit_if(ctx__if_stmt_statements, [])
|
1131
1141
|
else_statements = visit_if(ctx__if_stmt_else_statements, [])
|
1132
1142
|
|
1133
|
-
Model::Statements::If.new(
|
1143
|
+
Model::Statements::If.new(
|
1134
1144
|
expression: expression,
|
1135
1145
|
statements: statements,
|
1136
1146
|
else_statements: else_statements
|
1137
|
-
|
1147
|
+
)
|
1138
1148
|
end
|
1139
1149
|
|
1140
1150
|
def visit_if_stmt_statements(ctx)
|
@@ -1184,10 +1194,10 @@ module Expressir
|
|
1184
1194
|
index1 = visit_if(ctx__index1)
|
1185
1195
|
index2 = visit_if(ctx__index2)
|
1186
1196
|
|
1187
|
-
Model::
|
1197
|
+
Model::References::IndexReference.new(
|
1188
1198
|
index1: index1,
|
1189
1199
|
index2: index2
|
1190
|
-
|
1200
|
+
)
|
1191
1201
|
end
|
1192
1202
|
|
1193
1203
|
def visit_index_reference(ctx)
|
@@ -1202,7 +1212,7 @@ module Expressir
|
|
1202
1212
|
end
|
1203
1213
|
|
1204
1214
|
def visit_integer_type(ctx)
|
1205
|
-
Model::
|
1215
|
+
Model::DataTypes::Integer.new
|
1206
1216
|
end
|
1207
1217
|
|
1208
1218
|
def visit_interface_specification(ctx)
|
@@ -1224,13 +1234,13 @@ module Expressir
|
|
1224
1234
|
operator2 = visit_if(ctx__interval_op[1])
|
1225
1235
|
high = visit_if(ctx__interval_high)
|
1226
1236
|
|
1227
|
-
Model::Expressions::Interval.new(
|
1237
|
+
Model::Expressions::Interval.new(
|
1228
1238
|
low: low,
|
1229
1239
|
operator1: operator1,
|
1230
1240
|
item: item,
|
1231
1241
|
operator2: operator2,
|
1232
1242
|
high: high
|
1233
|
-
|
1243
|
+
)
|
1234
1244
|
end
|
1235
1245
|
|
1236
1246
|
def visit_interval_high(ctx)
|
@@ -1257,9 +1267,9 @@ module Expressir
|
|
1257
1267
|
ctx__LESS_THAN_OR_EQUAL = ctx__text == '<='
|
1258
1268
|
|
1259
1269
|
if ctx__LESS_THAN
|
1260
|
-
Model::Expressions::
|
1270
|
+
Model::Expressions::Interval::LESS_THAN
|
1261
1271
|
elsif ctx__LESS_THAN_OR_EQUAL
|
1262
|
-
Model::Expressions::
|
1272
|
+
Model::Expressions::Interval::LESS_THAN_OR_EQUAL
|
1263
1273
|
else
|
1264
1274
|
raise 'Invalid state'
|
1265
1275
|
end
|
@@ -1277,21 +1287,21 @@ module Expressir
|
|
1277
1287
|
ref = visit(ctx__entity_ref)
|
1278
1288
|
attribute_ref = visit(ctx__attribute_ref)
|
1279
1289
|
|
1280
|
-
Model::
|
1290
|
+
Model::References::AttributeReference.new(
|
1281
1291
|
ref: ref,
|
1282
1292
|
attribute: attribute_ref
|
1283
|
-
|
1293
|
+
)
|
1284
1294
|
else
|
1285
1295
|
visit(ctx__attribute_ref)
|
1286
1296
|
end
|
1287
1297
|
|
1288
|
-
Model::Attribute.new(
|
1298
|
+
Model::Declarations::Attribute.new(
|
1289
1299
|
id: attribute.id, # reuse
|
1290
|
-
kind: Model::Attribute::INVERSE,
|
1300
|
+
kind: Model::Declarations::Attribute::INVERSE,
|
1291
1301
|
supertype_attribute: attribute.supertype_attribute, # reuse
|
1292
1302
|
type: type,
|
1293
1303
|
expression: expression
|
1294
|
-
|
1304
|
+
)
|
1295
1305
|
end
|
1296
1306
|
|
1297
1307
|
def visit_inverse_attr_type(ctx)
|
@@ -1307,21 +1317,21 @@ module Expressir
|
|
1307
1317
|
bound2 = visit_if(ctx__bound_spec__bound2)
|
1308
1318
|
base_type = visit_if(ctx__entity_ref)
|
1309
1319
|
|
1310
|
-
Model::
|
1320
|
+
Model::DataTypes::Set.new(
|
1311
1321
|
bound1: bound1,
|
1312
1322
|
bound2: bound2,
|
1313
1323
|
base_type: base_type
|
1314
|
-
|
1324
|
+
)
|
1315
1325
|
elsif ctx__BAG
|
1316
1326
|
bound1 = visit_if(ctx__bound_spec__bound1)
|
1317
1327
|
bound2 = visit_if(ctx__bound_spec__bound2)
|
1318
1328
|
base_type = visit_if(ctx__entity_ref)
|
1319
1329
|
|
1320
|
-
Model::
|
1330
|
+
Model::DataTypes::Bag.new(
|
1321
1331
|
bound1: bound1,
|
1322
1332
|
bound2: bound2,
|
1323
1333
|
base_type: base_type
|
1324
|
-
|
1334
|
+
)
|
1325
1335
|
else
|
1326
1336
|
visit_if(ctx__entity_ref)
|
1327
1337
|
end
|
@@ -1345,12 +1355,12 @@ module Expressir
|
|
1345
1355
|
unique = ctx__UNIQUE && true
|
1346
1356
|
base_type = visit_if(ctx__instantiable_type)
|
1347
1357
|
|
1348
|
-
Model::
|
1358
|
+
Model::DataTypes::List.new(
|
1349
1359
|
bound1: bound1,
|
1350
1360
|
bound2: bound2,
|
1351
1361
|
unique: unique,
|
1352
1362
|
base_type: base_type
|
1353
|
-
|
1363
|
+
)
|
1354
1364
|
end
|
1355
1365
|
|
1356
1366
|
def visit_literal(ctx)
|
@@ -1391,11 +1401,11 @@ module Expressir
|
|
1391
1401
|
expression = visit_if(ctx__expression)
|
1392
1402
|
|
1393
1403
|
ids.map do |id|
|
1394
|
-
Model::Variable.new(
|
1404
|
+
Model::Declarations::Variable.new(
|
1395
1405
|
id: id,
|
1396
1406
|
type: type,
|
1397
1407
|
expression: expression
|
1398
|
-
|
1408
|
+
)
|
1399
1409
|
end
|
1400
1410
|
end
|
1401
1411
|
|
@@ -1420,13 +1430,13 @@ module Expressir
|
|
1420
1430
|
raise 'Invalid state'
|
1421
1431
|
end
|
1422
1432
|
|
1423
|
-
Model::Literals::Logical.new(
|
1433
|
+
Model::Literals::Logical.new(
|
1424
1434
|
value: value
|
1425
|
-
|
1435
|
+
)
|
1426
1436
|
end
|
1427
1437
|
|
1428
1438
|
def visit_logical_type(ctx)
|
1429
|
-
Model::
|
1439
|
+
Model::DataTypes::Logical.new
|
1430
1440
|
end
|
1431
1441
|
|
1432
1442
|
def visit_multiplication_like_op(ctx)
|
@@ -1470,10 +1480,10 @@ module Expressir
|
|
1470
1480
|
ref = visit_if(ctx__named_types)
|
1471
1481
|
id = visit_if(ctx__entity_id || ctx__type_id)
|
1472
1482
|
|
1473
|
-
Model::InterfaceItem.new(
|
1483
|
+
Model::Declarations::InterfaceItem.new(
|
1474
1484
|
ref: ref,
|
1475
1485
|
id: id
|
1476
|
-
|
1486
|
+
)
|
1477
1487
|
end
|
1478
1488
|
|
1479
1489
|
def visit_null_stmt(ctx)
|
@@ -1481,7 +1491,7 @@ module Expressir
|
|
1481
1491
|
end
|
1482
1492
|
|
1483
1493
|
def visit_number_type(ctx)
|
1484
|
-
Model::
|
1494
|
+
Model::DataTypes::Number.new
|
1485
1495
|
end
|
1486
1496
|
|
1487
1497
|
def visit_numeric_expression(ctx)
|
@@ -1493,13 +1503,11 @@ module Expressir
|
|
1493
1503
|
def visit_one_of(ctx)
|
1494
1504
|
ctx__supertype_expression = ctx.supertype_expression
|
1495
1505
|
|
1496
|
-
|
1497
|
-
parameters = visit_if_map(ctx__supertype_expression)
|
1506
|
+
operands = visit_if_map(ctx__supertype_expression)
|
1498
1507
|
|
1499
|
-
Model::
|
1500
|
-
|
1501
|
-
|
1502
|
-
})
|
1508
|
+
Model::SupertypeExpressions::OneofSupertypeExpression.new(
|
1509
|
+
operands: operands
|
1510
|
+
)
|
1503
1511
|
end
|
1504
1512
|
|
1505
1513
|
def visit_parameter(ctx)
|
@@ -1553,13 +1561,13 @@ module Expressir
|
|
1553
1561
|
ctx__procedure_ref = ctx.procedure_ref
|
1554
1562
|
ctx__actual_parameter_list = ctx.actual_parameter_list
|
1555
1563
|
|
1556
|
-
|
1564
|
+
procedure = visit_if(ctx__built_in_procedure || ctx__procedure_ref)
|
1557
1565
|
parameters = visit_if(ctx__actual_parameter_list, [])
|
1558
1566
|
|
1559
|
-
Model::Statements::
|
1560
|
-
|
1567
|
+
Model::Statements::ProcedureCall.new(
|
1568
|
+
procedure: procedure,
|
1561
1569
|
parameters: parameters
|
1562
|
-
|
1570
|
+
)
|
1563
1571
|
end
|
1564
1572
|
|
1565
1573
|
def visit_procedure_decl(ctx)
|
@@ -1575,16 +1583,16 @@ module Expressir
|
|
1575
1583
|
id = visit_if(ctx__procedure_head__procedure_id)
|
1576
1584
|
parameters = visit_if_map_flatten(ctx__procedure_head__procedure_head_parameter)
|
1577
1585
|
declarations = visit_if_map(ctx__algorithm_head__declaration)
|
1578
|
-
types = declarations.select{|x| x.is_a? Model::Type}
|
1579
|
-
entities = declarations.select{|x| x.is_a? Model::Entity}
|
1580
|
-
subtype_constraints = declarations.select{|x| x.is_a? Model::SubtypeConstraint}
|
1581
|
-
functions = declarations.select{|x| x.is_a? Model::Function}
|
1582
|
-
procedures = declarations.select{|x| x.is_a? Model::Procedure}
|
1586
|
+
types = declarations.select{|x| x.is_a? Model::Declarations::Type}
|
1587
|
+
entities = declarations.select{|x| x.is_a? Model::Declarations::Entity}
|
1588
|
+
subtype_constraints = declarations.select{|x| x.is_a? Model::Declarations::SubtypeConstraint}
|
1589
|
+
functions = declarations.select{|x| x.is_a? Model::Declarations::Function}
|
1590
|
+
procedures = declarations.select{|x| x.is_a? Model::Declarations::Procedure}
|
1583
1591
|
constants = visit_if(ctx__algorithm_head__constant_decl, [])
|
1584
1592
|
variables = visit_if(ctx__algorithm_head__local_decl, [])
|
1585
1593
|
statements = visit_if_map(ctx__stmt)
|
1586
1594
|
|
1587
|
-
Model::Procedure.new(
|
1595
|
+
Model::Declarations::Procedure.new(
|
1588
1596
|
id: id,
|
1589
1597
|
parameters: parameters,
|
1590
1598
|
types: types,
|
@@ -1595,7 +1603,7 @@ module Expressir
|
|
1595
1603
|
constants: constants,
|
1596
1604
|
variables: variables,
|
1597
1605
|
statements: statements
|
1598
|
-
|
1606
|
+
)
|
1599
1607
|
end
|
1600
1608
|
|
1601
1609
|
def visit_procedure_head(ctx)
|
@@ -1610,11 +1618,11 @@ module Expressir
|
|
1610
1618
|
|
1611
1619
|
if ctx.VAR
|
1612
1620
|
parameters.map do |parameter|
|
1613
|
-
Model::Parameter.new(
|
1621
|
+
Model::Declarations::Parameter.new(
|
1614
1622
|
id: parameter.id,
|
1615
1623
|
var: true,
|
1616
1624
|
type: parameter.type
|
1617
|
-
|
1625
|
+
)
|
1618
1626
|
end
|
1619
1627
|
else
|
1620
1628
|
parameters
|
@@ -1645,15 +1653,15 @@ module Expressir
|
|
1645
1653
|
group_reference = visit_if(ctx__group_qualifier)
|
1646
1654
|
attribute_reference = visit_if(ctx__attribute_qualifier)
|
1647
1655
|
|
1648
|
-
Model::
|
1649
|
-
ref: Model::
|
1650
|
-
ref: Model::
|
1656
|
+
Model::References::AttributeReference.new(
|
1657
|
+
ref: Model::References::GroupReference.new(
|
1658
|
+
ref: Model::References::SimpleReference.new(
|
1651
1659
|
id: id
|
1652
|
-
|
1660
|
+
),
|
1653
1661
|
entity: group_reference.entity # reuse
|
1654
|
-
|
1662
|
+
),
|
1655
1663
|
attribute: attribute_reference.attribute # reuse
|
1656
|
-
|
1664
|
+
)
|
1657
1665
|
end
|
1658
1666
|
|
1659
1667
|
def visit_qualifier(ctx)
|
@@ -1673,11 +1681,11 @@ module Expressir
|
|
1673
1681
|
aggregate_source = visit_if(ctx__aggregate_source)
|
1674
1682
|
expression = visit_if(ctx__logical_expression)
|
1675
1683
|
|
1676
|
-
Model::Expressions::QueryExpression.new(
|
1684
|
+
Model::Expressions::QueryExpression.new(
|
1677
1685
|
id: id,
|
1678
1686
|
aggregate_source: aggregate_source,
|
1679
1687
|
expression: expression
|
1680
|
-
|
1688
|
+
)
|
1681
1689
|
end
|
1682
1690
|
|
1683
1691
|
def visit_real_type(ctx)
|
@@ -1685,9 +1693,9 @@ module Expressir
|
|
1685
1693
|
|
1686
1694
|
precision = visit_if(ctx__precision_spec)
|
1687
1695
|
|
1688
|
-
Model::
|
1696
|
+
Model::DataTypes::Real.new(
|
1689
1697
|
precision: precision
|
1690
|
-
|
1698
|
+
)
|
1691
1699
|
end
|
1692
1700
|
|
1693
1701
|
def visit_redeclared_attribute(ctx)
|
@@ -1708,11 +1716,11 @@ module Expressir
|
|
1708
1716
|
schema = visit_if(ctx__schema_ref)
|
1709
1717
|
items = visit_if_map(ctx__resource_or_rename)
|
1710
1718
|
|
1711
|
-
Model::Interface.new(
|
1712
|
-
kind: Model::Interface::REFERENCE,
|
1719
|
+
Model::Declarations::Interface.new(
|
1720
|
+
kind: Model::Declarations::Interface::REFERENCE,
|
1713
1721
|
schema: schema,
|
1714
1722
|
items: items
|
1715
|
-
|
1723
|
+
)
|
1716
1724
|
end
|
1717
1725
|
|
1718
1726
|
def visit_rel_op(ctx)
|
@@ -1796,7 +1804,7 @@ module Expressir
|
|
1796
1804
|
until_expression = visit_if(ctx__repeat_control__until_control)
|
1797
1805
|
statements = visit_if_map(ctx__stmt)
|
1798
1806
|
|
1799
|
-
Model::Statements::Repeat.new(
|
1807
|
+
Model::Statements::Repeat.new(
|
1800
1808
|
id: id,
|
1801
1809
|
bound1: bound1,
|
1802
1810
|
bound2: bound2,
|
@@ -1804,7 +1812,7 @@ module Expressir
|
|
1804
1812
|
while_expression: while_expression,
|
1805
1813
|
until_expression: until_expression,
|
1806
1814
|
statements: statements
|
1807
|
-
|
1815
|
+
)
|
1808
1816
|
end
|
1809
1817
|
|
1810
1818
|
def visit_repetition(ctx)
|
@@ -1820,10 +1828,10 @@ module Expressir
|
|
1820
1828
|
ref = visit_if(ctx__resource_ref)
|
1821
1829
|
id = visit_if(ctx__rename_id)
|
1822
1830
|
|
1823
|
-
Model::InterfaceItem.new(
|
1831
|
+
Model::Declarations::InterfaceItem.new(
|
1824
1832
|
ref: ref,
|
1825
1833
|
id: id
|
1826
|
-
|
1834
|
+
)
|
1827
1835
|
end
|
1828
1836
|
|
1829
1837
|
def visit_resource_ref(ctx)
|
@@ -1841,9 +1849,9 @@ module Expressir
|
|
1841
1849
|
|
1842
1850
|
expression = visit_if(ctx__expression)
|
1843
1851
|
|
1844
|
-
Model::Statements::Return.new(
|
1852
|
+
Model::Statements::Return.new(
|
1845
1853
|
expression: expression
|
1846
|
-
|
1854
|
+
)
|
1847
1855
|
end
|
1848
1856
|
|
1849
1857
|
def visit_rule_decl(ctx)
|
@@ -1860,17 +1868,17 @@ module Expressir
|
|
1860
1868
|
id = visit_if(ctx__rule_head__rule_id)
|
1861
1869
|
applies_to = visit_if_map(ctx__rule_head__entity_ref)
|
1862
1870
|
declarations = visit_if_map(ctx__algorithm_head__declaration)
|
1863
|
-
types = declarations.select{|x| x.is_a? Model::Type}
|
1864
|
-
entities = declarations.select{|x| x.is_a? Model::Entity}
|
1865
|
-
subtype_constraints = declarations.select{|x| x.is_a? Model::SubtypeConstraint}
|
1866
|
-
functions = declarations.select{|x| x.is_a? Model::Function}
|
1867
|
-
procedures = declarations.select{|x| x.is_a? Model::Procedure}
|
1871
|
+
types = declarations.select{|x| x.is_a? Model::Declarations::Type}
|
1872
|
+
entities = declarations.select{|x| x.is_a? Model::Declarations::Entity}
|
1873
|
+
subtype_constraints = declarations.select{|x| x.is_a? Model::Declarations::SubtypeConstraint}
|
1874
|
+
functions = declarations.select{|x| x.is_a? Model::Declarations::Function}
|
1875
|
+
procedures = declarations.select{|x| x.is_a? Model::Declarations::Procedure}
|
1868
1876
|
constants = visit_if(ctx__algorithm_head__constant_decl, [])
|
1869
1877
|
variables = visit_if(ctx__algorithm_head__local_decl, [])
|
1870
1878
|
statements = visit_if_map(ctx__stmt)
|
1871
1879
|
where_rules = visit_if(ctx__where_clause, [])
|
1872
1880
|
|
1873
|
-
Model::Rule.new(
|
1881
|
+
Model::Declarations::Rule.new(
|
1874
1882
|
id: id,
|
1875
1883
|
applies_to: applies_to,
|
1876
1884
|
types: types,
|
@@ -1882,7 +1890,7 @@ module Expressir
|
|
1882
1890
|
variables: variables,
|
1883
1891
|
statements: statements,
|
1884
1892
|
where_rules: where_rules
|
1885
|
-
|
1893
|
+
)
|
1886
1894
|
end
|
1887
1895
|
|
1888
1896
|
def visit_rule_head(ctx)
|
@@ -1925,14 +1933,14 @@ module Expressir
|
|
1925
1933
|
interfaces = visit_if_map(ctx__schema_body__interface_specification)
|
1926
1934
|
constants = visit_if(ctx__schema_body__constant_decl, [])
|
1927
1935
|
declarations = visit_if_map(ctx__schema_body__schema_body_declaration)
|
1928
|
-
types = declarations.select{|x| x.is_a? Model::Type}
|
1929
|
-
entities = declarations.select{|x| x.is_a? Model::Entity}
|
1930
|
-
subtype_constraints = declarations.select{|x| x.is_a? Model::SubtypeConstraint}
|
1931
|
-
functions = declarations.select{|x| x.is_a? Model::Function}
|
1932
|
-
rules = declarations.select{|x| x.is_a? Model::Rule}
|
1933
|
-
procedures = declarations.select{|x| x.is_a? Model::Procedure}
|
1934
|
-
|
1935
|
-
Model::Schema.new(
|
1936
|
+
types = declarations.select{|x| x.is_a? Model::Declarations::Type}
|
1937
|
+
entities = declarations.select{|x| x.is_a? Model::Declarations::Entity}
|
1938
|
+
subtype_constraints = declarations.select{|x| x.is_a? Model::Declarations::SubtypeConstraint}
|
1939
|
+
functions = declarations.select{|x| x.is_a? Model::Declarations::Function}
|
1940
|
+
rules = declarations.select{|x| x.is_a? Model::Declarations::Rule}
|
1941
|
+
procedures = declarations.select{|x| x.is_a? Model::Declarations::Procedure}
|
1942
|
+
|
1943
|
+
Model::Declarations::Schema.new(
|
1936
1944
|
id: id,
|
1937
1945
|
version: version,
|
1938
1946
|
interfaces: interfaces,
|
@@ -1943,7 +1951,7 @@ module Expressir
|
|
1943
1951
|
functions: functions,
|
1944
1952
|
rules: rules,
|
1945
1953
|
procedures: procedures
|
1946
|
-
|
1954
|
+
)
|
1947
1955
|
end
|
1948
1956
|
|
1949
1957
|
def visit_schema_id(ctx)
|
@@ -1962,26 +1970,26 @@ module Expressir
|
|
1962
1970
|
parts = value.sub(/^\{/, '').sub(/\}$/, '').split(' ')
|
1963
1971
|
parts.map do |part|
|
1964
1972
|
if match = part.match(/^(.+)\((\d+)\)$/)
|
1965
|
-
Model::SchemaVersionItem.new(
|
1973
|
+
Model::Declarations::SchemaVersionItem.new(
|
1966
1974
|
name: match[1],
|
1967
1975
|
value: match[2]
|
1968
|
-
|
1976
|
+
)
|
1969
1977
|
elsif part.match(/^\d+$/)
|
1970
|
-
Model::SchemaVersionItem.new(
|
1978
|
+
Model::Declarations::SchemaVersionItem.new(
|
1971
1979
|
value: part
|
1972
|
-
|
1980
|
+
)
|
1973
1981
|
else
|
1974
|
-
Model::SchemaVersionItem.new(
|
1982
|
+
Model::Declarations::SchemaVersionItem.new(
|
1975
1983
|
name: part
|
1976
|
-
|
1984
|
+
)
|
1977
1985
|
end
|
1978
1986
|
end
|
1979
1987
|
end
|
1980
1988
|
|
1981
|
-
Model::SchemaVersion.new(
|
1989
|
+
Model::Declarations::SchemaVersion.new(
|
1982
1990
|
value: value,
|
1983
1991
|
items: items
|
1984
|
-
|
1992
|
+
)
|
1985
1993
|
end
|
1986
1994
|
|
1987
1995
|
def visit_selector(ctx)
|
@@ -2013,12 +2021,12 @@ module Expressir
|
|
2013
2021
|
based_on = visit_if(ctx__select_extension__type_ref)
|
2014
2022
|
items = visit_if(ctx__select_list || ctx__select_extension__select_list, [])
|
2015
2023
|
|
2016
|
-
Model::
|
2024
|
+
Model::DataTypes::Select.new(
|
2017
2025
|
extensible: extensible,
|
2018
2026
|
generic_entity: generic_entity,
|
2019
2027
|
based_on: based_on,
|
2020
2028
|
items: items
|
2021
|
-
|
2029
|
+
)
|
2022
2030
|
end
|
2023
2031
|
|
2024
2032
|
def visit_set_type(ctx)
|
@@ -2031,11 +2039,11 @@ module Expressir
|
|
2031
2039
|
bound2 = visit_if(ctx__bound_spec__bound2)
|
2032
2040
|
base_type = visit_if(ctx__instantiable_type)
|
2033
2041
|
|
2034
|
-
Model::
|
2042
|
+
Model::DataTypes::Set.new(
|
2035
2043
|
bound1: bound1,
|
2036
2044
|
bound2: bound2,
|
2037
2045
|
base_type: base_type
|
2038
|
-
|
2046
|
+
)
|
2039
2047
|
end
|
2040
2048
|
|
2041
2049
|
def visit_simple_expression(ctx)
|
@@ -2086,10 +2094,10 @@ module Expressir
|
|
2086
2094
|
operator = visit_if(ctx__unary_op)
|
2087
2095
|
operand = visit_if(ctx__simple_factor_expression)
|
2088
2096
|
|
2089
|
-
Model::Expressions::UnaryExpression.new(
|
2097
|
+
Model::Expressions::UnaryExpression.new(
|
2090
2098
|
operator: operator,
|
2091
2099
|
operand: operand
|
2092
|
-
|
2100
|
+
)
|
2093
2101
|
end
|
2094
2102
|
|
2095
2103
|
def visit_simple_types(ctx)
|
@@ -2145,10 +2153,10 @@ module Expressir
|
|
2145
2153
|
width = visit_if(ctx__width_spec__width)
|
2146
2154
|
fixed = ctx__width_spec__FIXED && true
|
2147
2155
|
|
2148
|
-
Model::
|
2156
|
+
Model::DataTypes::String.new(
|
2149
2157
|
width: width,
|
2150
2158
|
fixed: fixed
|
2151
|
-
|
2159
|
+
)
|
2152
2160
|
end
|
2153
2161
|
|
2154
2162
|
def visit_subsuper(ctx)
|
@@ -2180,13 +2188,13 @@ module Expressir
|
|
2180
2188
|
total_over = visit_if(ctx__subtype_constraint_body__total_over, [])
|
2181
2189
|
supertype_expression = visit_if(ctx__subtype_constraint_body__supertype_expression)
|
2182
2190
|
|
2183
|
-
Model::SubtypeConstraint.new(
|
2191
|
+
Model::Declarations::SubtypeConstraint.new(
|
2184
2192
|
id: id,
|
2185
2193
|
applies_to: applies_to,
|
2186
2194
|
abstract: abstract,
|
2187
2195
|
total_over: total_over,
|
2188
2196
|
supertype_expression: supertype_expression
|
2189
|
-
|
2197
|
+
)
|
2190
2198
|
end
|
2191
2199
|
|
2192
2200
|
def visit_subtype_constraint_head(ctx)
|
@@ -2217,9 +2225,9 @@ module Expressir
|
|
2217
2225
|
if ctx__supertype_factor.length >= 2
|
2218
2226
|
if ctx__ANDOR and ctx__ANDOR.length == ctx__supertype_factor.length - 1
|
2219
2227
|
operands = ctx__supertype_factor.map(&self.method(:visit))
|
2220
|
-
operators = ctx__ANDOR.map{Model::
|
2228
|
+
operators = ctx__ANDOR.map{Model::SupertypeExpressions::BinarySupertypeExpression::ANDOR}
|
2221
2229
|
|
2222
|
-
|
2230
|
+
handle_binary_supertype_expression(operands, operators)
|
2223
2231
|
else
|
2224
2232
|
raise 'Invalid state'
|
2225
2233
|
end
|
@@ -2239,9 +2247,9 @@ module Expressir
|
|
2239
2247
|
if ctx__supertype_term.length >= 2
|
2240
2248
|
if ctx__AND and ctx__AND.length == ctx__supertype_term.length - 1
|
2241
2249
|
operands = ctx__supertype_term.map(&self.method(:visit))
|
2242
|
-
operators = ctx__AND.map{Model::
|
2250
|
+
operators = ctx__AND.map{Model::SupertypeExpressions::BinarySupertypeExpression::AND}
|
2243
2251
|
|
2244
|
-
|
2252
|
+
handle_binary_supertype_expression(operands, operators)
|
2245
2253
|
else
|
2246
2254
|
raise 'Invalid state'
|
2247
2255
|
end
|
@@ -2272,9 +2280,9 @@ module Expressir
|
|
2272
2280
|
|
2273
2281
|
schemas = visit_if_map(ctx__schema_decl)
|
2274
2282
|
|
2275
|
-
Model::Repository.new(
|
2283
|
+
Model::Repository.new(
|
2276
2284
|
schemas: schemas
|
2277
|
-
|
2285
|
+
)
|
2278
2286
|
end
|
2279
2287
|
|
2280
2288
|
def visit_term(ctx)
|
@@ -2314,11 +2322,11 @@ module Expressir
|
|
2314
2322
|
underlying_type = visit_if(ctx__underlying_type)
|
2315
2323
|
where_rules = visit_if(ctx__where_clause, [])
|
2316
2324
|
|
2317
|
-
Model::Type.new(
|
2325
|
+
Model::Declarations::Type.new(
|
2318
2326
|
id: id,
|
2319
2327
|
underlying_type: underlying_type,
|
2320
2328
|
where_rules: where_rules
|
2321
|
-
|
2329
|
+
)
|
2322
2330
|
end
|
2323
2331
|
|
2324
2332
|
def visit_type_id(ctx)
|
@@ -2377,10 +2385,10 @@ module Expressir
|
|
2377
2385
|
id = visit_if(ctx__rule_label_id)
|
2378
2386
|
attributes = visit_if_map(ctx__referenced_attribute)
|
2379
2387
|
|
2380
|
-
Model::UniqueRule.new(
|
2388
|
+
Model::Declarations::UniqueRule.new(
|
2381
2389
|
id: id,
|
2382
2390
|
attributes: attributes
|
2383
|
-
|
2391
|
+
)
|
2384
2392
|
end
|
2385
2393
|
|
2386
2394
|
def visit_until_control(ctx)
|
@@ -2396,11 +2404,11 @@ module Expressir
|
|
2396
2404
|
schema = visit_if(ctx__schema_ref)
|
2397
2405
|
items = visit_if_map(ctx__named_type_or_rename)
|
2398
2406
|
|
2399
|
-
Model::Interface.new(
|
2400
|
-
kind: Model::Interface::USE,
|
2407
|
+
Model::Declarations::Interface.new(
|
2408
|
+
kind: Model::Declarations::Interface::USE,
|
2401
2409
|
schema: schema,
|
2402
2410
|
items: items
|
2403
|
-
|
2411
|
+
)
|
2404
2412
|
end
|
2405
2413
|
|
2406
2414
|
def visit_variable_id(ctx)
|
@@ -2431,24 +2439,42 @@ module Expressir
|
|
2431
2439
|
raise 'Invalid state'
|
2432
2440
|
end
|
2433
2441
|
|
2434
|
-
private
|
2435
|
-
|
2436
2442
|
def handle_binary_expression(operands, operators)
|
2437
2443
|
if operands.length != operators.length + 1
|
2438
2444
|
raise 'Invalid state'
|
2439
2445
|
end
|
2440
2446
|
|
2441
|
-
expression = Model::Expressions::BinaryExpression.new(
|
2447
|
+
expression = Model::Expressions::BinaryExpression.new(
|
2448
|
+
operator: operators[0],
|
2449
|
+
operand1: operands[0],
|
2450
|
+
operand2: operands[1]
|
2451
|
+
)
|
2452
|
+
operators[1..(operators.length - 1)].each_with_index do |operator, i|
|
2453
|
+
expression = Model::Expressions::BinaryExpression.new(
|
2454
|
+
operator: operator,
|
2455
|
+
operand1: expression,
|
2456
|
+
operand2: operands[i + 2]
|
2457
|
+
)
|
2458
|
+
end
|
2459
|
+
expression
|
2460
|
+
end
|
2461
|
+
|
2462
|
+
def handle_binary_supertype_expression(operands, operators)
|
2463
|
+
if operands.length != operators.length + 1
|
2464
|
+
raise 'Invalid state'
|
2465
|
+
end
|
2466
|
+
|
2467
|
+
expression = Model::SupertypeExpressions::BinarySupertypeExpression.new(
|
2442
2468
|
operator: operators[0],
|
2443
2469
|
operand1: operands[0],
|
2444
2470
|
operand2: operands[1]
|
2445
|
-
|
2471
|
+
)
|
2446
2472
|
operators[1..(operators.length - 1)].each_with_index do |operator, i|
|
2447
|
-
expression = Model::
|
2473
|
+
expression = Model::SupertypeExpressions::BinarySupertypeExpression.new(
|
2448
2474
|
operator: operator,
|
2449
2475
|
operand1: expression,
|
2450
2476
|
operand2: operands[i + 2]
|
2451
|
-
|
2477
|
+
)
|
2452
2478
|
end
|
2453
2479
|
expression
|
2454
2480
|
end
|
@@ -2462,25 +2488,25 @@ module Expressir
|
|
2462
2488
|
if ctx__attribute_qualifier
|
2463
2489
|
attribute_reference = visit_if(ctx__attribute_qualifier)
|
2464
2490
|
|
2465
|
-
Model::
|
2491
|
+
Model::References::AttributeReference.new(
|
2466
2492
|
ref: ref,
|
2467
2493
|
attribute: attribute_reference.attribute
|
2468
|
-
|
2494
|
+
)
|
2469
2495
|
elsif ctx__group_qualifier
|
2470
2496
|
group_reference = visit_if(ctx__group_qualifier)
|
2471
2497
|
|
2472
|
-
Model::
|
2498
|
+
Model::References::GroupReference.new(
|
2473
2499
|
ref: ref,
|
2474
2500
|
entity: group_reference.entity
|
2475
|
-
|
2501
|
+
)
|
2476
2502
|
elsif ctx__index_qualifier
|
2477
2503
|
index_reference = visit_if(ctx__index_qualifier)
|
2478
2504
|
|
2479
|
-
Model::
|
2505
|
+
Model::References::IndexReference.new(
|
2480
2506
|
ref: ref,
|
2481
2507
|
index1: index_reference.index1,
|
2482
2508
|
index2: index_reference.index2
|
2483
|
-
|
2509
|
+
)
|
2484
2510
|
else
|
2485
2511
|
raise 'Invalid state'
|
2486
2512
|
end
|
@@ -2492,9 +2518,9 @@ module Expressir
|
|
2492
2518
|
|
2493
2519
|
value = ctx__text[1..(ctx__text.length - 1)]
|
2494
2520
|
|
2495
|
-
Model::Literals::Binary.new(
|
2521
|
+
Model::Literals::Binary.new(
|
2496
2522
|
value: value
|
2497
|
-
|
2523
|
+
)
|
2498
2524
|
end
|
2499
2525
|
|
2500
2526
|
def handle_integer_literal(ctx)
|
@@ -2502,9 +2528,9 @@ module Expressir
|
|
2502
2528
|
|
2503
2529
|
value = ctx__text
|
2504
2530
|
|
2505
|
-
Model::Literals::Integer.new(
|
2531
|
+
Model::Literals::Integer.new(
|
2506
2532
|
value: value
|
2507
|
-
|
2533
|
+
)
|
2508
2534
|
end
|
2509
2535
|
|
2510
2536
|
def handle_real_literal(ctx)
|
@@ -2512,9 +2538,9 @@ module Expressir
|
|
2512
2538
|
|
2513
2539
|
value = ctx__text
|
2514
2540
|
|
2515
|
-
Model::Literals::Real.new(
|
2541
|
+
Model::Literals::Real.new(
|
2516
2542
|
value: value
|
2517
|
-
|
2543
|
+
)
|
2518
2544
|
end
|
2519
2545
|
|
2520
2546
|
def handle_simple_id(ctx)
|
@@ -2528,9 +2554,9 @@ module Expressir
|
|
2528
2554
|
|
2529
2555
|
value = ctx__text[1..(ctx__text.length - 2)].force_encoding('UTF-8')
|
2530
2556
|
|
2531
|
-
Model::Literals::String.new(
|
2557
|
+
Model::Literals::String.new(
|
2532
2558
|
value: value
|
2533
|
-
|
2559
|
+
)
|
2534
2560
|
end
|
2535
2561
|
|
2536
2562
|
def handle_encoded_string_literal(ctx)
|
@@ -2538,10 +2564,10 @@ module Expressir
|
|
2538
2564
|
|
2539
2565
|
value = ctx__text[1..(ctx__text.length - 2)].force_encoding('UTF-8')
|
2540
2566
|
|
2541
|
-
Model::Literals::String.new(
|
2567
|
+
Model::Literals::String.new(
|
2542
2568
|
value: value,
|
2543
2569
|
encoded: true
|
2544
|
-
|
2570
|
+
)
|
2545
2571
|
end
|
2546
2572
|
end
|
2547
2573
|
end
|