expressir 1.0.0-x86-mingw32 → 1.2.1-x86-mingw32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. checksums.yaml +4 -4
  2. data/.cross_rubies +6 -18
  3. data/.github/workflows/rake.yml +50 -5
  4. data/.github/workflows/release.yml +11 -3
  5. data/.hound.yml +3 -0
  6. data/.rubocop.yml +6 -506
  7. data/.yardopts +11 -0
  8. data/Rakefile +3 -0
  9. data/expressir.gemspec +4 -1
  10. data/lib/expressir/express/2.7/express_parser.so +0 -0
  11. data/lib/expressir/express/3.0/express_parser.so +0 -0
  12. data/lib/expressir/express/3.1/express_parser.so +0 -0
  13. data/lib/expressir/express/cache.rb +16 -10
  14. data/lib/expressir/express/formatter.rb +231 -180
  15. data/lib/expressir/express/hyperlink_formatter.rb +15 -1
  16. data/lib/expressir/express/model_visitor.rb +1 -0
  17. data/lib/expressir/express/parser.rb +16 -10
  18. data/lib/expressir/express/resolve_references_model_visitor.rb +7 -5
  19. data/lib/expressir/express/schema_head_formatter.rb +16 -2
  20. data/lib/expressir/express/visitor.rb +280 -254
  21. data/lib/expressir/model/cache.rb +6 -2
  22. data/lib/expressir/model/data_type.rb +9 -0
  23. data/lib/expressir/model/data_types/aggregate.rb +31 -0
  24. data/lib/expressir/model/data_types/array.rb +31 -0
  25. data/lib/expressir/model/data_types/bag.rb +25 -0
  26. data/lib/expressir/model/data_types/binary.rb +22 -0
  27. data/lib/expressir/model/data_types/boolean.rb +10 -0
  28. data/lib/expressir/model/data_types/enumeration.rb +25 -0
  29. data/lib/expressir/model/data_types/enumeration_item.rb +26 -0
  30. data/lib/expressir/model/data_types/generic.rb +26 -0
  31. data/lib/expressir/model/data_types/generic_entity.rb +26 -0
  32. data/lib/expressir/model/data_types/integer.rb +10 -0
  33. data/lib/expressir/model/data_types/list.rb +28 -0
  34. data/lib/expressir/model/data_types/logical.rb +10 -0
  35. data/lib/expressir/model/data_types/number.rb +10 -0
  36. data/lib/expressir/model/data_types/real.rb +19 -0
  37. data/lib/expressir/model/data_types/select.rb +28 -0
  38. data/lib/expressir/model/data_types/set.rb +25 -0
  39. data/lib/expressir/model/data_types/string.rb +22 -0
  40. data/lib/expressir/model/declaration.rb +9 -0
  41. data/lib/expressir/model/declarations/attribute.rb +47 -0
  42. data/lib/expressir/model/declarations/constant.rb +34 -0
  43. data/lib/expressir/model/declarations/entity.rb +53 -0
  44. data/lib/expressir/model/declarations/function.rb +67 -0
  45. data/lib/expressir/model/declarations/interface.rb +28 -0
  46. data/lib/expressir/model/declarations/interface_item.rb +23 -0
  47. data/lib/expressir/model/declarations/interfaced_item.rb +37 -0
  48. data/lib/expressir/model/declarations/parameter.rb +34 -0
  49. data/lib/expressir/model/declarations/procedure.rb +64 -0
  50. data/lib/expressir/model/declarations/remark_item.rb +21 -0
  51. data/lib/expressir/model/declarations/rule.rb +71 -0
  52. data/lib/expressir/model/declarations/schema.rb +117 -0
  53. data/lib/expressir/model/declarations/schema_version.rb +22 -0
  54. data/lib/expressir/model/declarations/schema_version_item.rb +22 -0
  55. data/lib/expressir/model/declarations/subtype_constraint.rb +40 -0
  56. data/lib/expressir/model/declarations/type.rb +45 -0
  57. data/lib/expressir/model/declarations/unique_rule.rb +31 -0
  58. data/lib/expressir/model/declarations/variable.rb +34 -0
  59. data/lib/expressir/model/declarations/where_rule.rb +31 -0
  60. data/lib/expressir/model/expression.rb +9 -0
  61. data/lib/expressir/model/expressions/aggregate_initializer.rb +6 -2
  62. data/lib/expressir/model/expressions/aggregate_initializer_item.rb +22 -0
  63. data/lib/expressir/model/expressions/binary_expression.rb +16 -5
  64. data/lib/expressir/model/expressions/entity_constructor.rb +8 -3
  65. data/lib/expressir/model/expressions/function_call.rb +22 -0
  66. data/lib/expressir/model/expressions/interval.rb +17 -6
  67. data/lib/expressir/model/expressions/query_expression.rb +11 -7
  68. data/lib/expressir/model/expressions/unary_expression.rb +9 -3
  69. data/lib/expressir/model/identifier.rb +26 -4
  70. data/lib/expressir/model/literal.rb +9 -0
  71. data/lib/expressir/model/literals/binary.rb +6 -2
  72. data/lib/expressir/model/literals/integer.rb +6 -2
  73. data/lib/expressir/model/literals/logical.rb +6 -2
  74. data/lib/expressir/model/literals/real.rb +6 -2
  75. data/lib/expressir/model/literals/string.rb +8 -3
  76. data/lib/expressir/model/model_element.rb +63 -37
  77. data/lib/expressir/model/reference.rb +9 -0
  78. data/lib/expressir/model/references/attribute_reference.rb +22 -0
  79. data/lib/expressir/model/references/group_reference.rb +22 -0
  80. data/lib/expressir/model/references/index_reference.rb +27 -0
  81. data/lib/expressir/model/references/simple_reference.rb +24 -0
  82. data/lib/expressir/model/repository.rb +5 -1
  83. data/lib/expressir/model/statement.rb +9 -0
  84. data/lib/expressir/model/statements/alias.rb +11 -7
  85. data/lib/expressir/model/statements/assignment.rb +8 -3
  86. data/lib/expressir/model/statements/case.rb +10 -4
  87. data/lib/expressir/model/statements/case_action.rb +7 -2
  88. data/lib/expressir/model/statements/compound.rb +6 -2
  89. data/lib/expressir/model/statements/escape.rb +3 -1
  90. data/lib/expressir/model/statements/if.rb +10 -4
  91. data/lib/expressir/model/statements/null.rb +3 -1
  92. data/lib/expressir/model/statements/procedure_call.rb +22 -0
  93. data/lib/expressir/model/statements/repeat.rb +19 -11
  94. data/lib/expressir/model/statements/return.rb +6 -2
  95. data/lib/expressir/model/statements/skip.rb +3 -1
  96. data/lib/expressir/model/supertype_expression.rb +9 -0
  97. data/lib/expressir/model/supertype_expressions/binary_supertype_expression.rb +29 -0
  98. data/lib/expressir/model/supertype_expressions/oneof_supertype_expression.rb +19 -0
  99. data/lib/expressir/model.rb +52 -45
  100. data/lib/expressir/version.rb +1 -1
  101. data/spec/expressir/model/model_element_spec.rb +131 -131
  102. data/spec/syntax/multiple.yaml +68 -68
  103. data/spec/syntax/remark.yaml +64 -64
  104. data/spec/syntax/single.yaml +5 -5
  105. data/spec/syntax/single_formatted.yaml +5 -5
  106. data/spec/syntax/syntax.yaml +1003 -1030
  107. metadata +105 -54
  108. data/lib/expressir/express/2.4/express_parser.so +0 -0
  109. data/lib/expressir/express/2.5/express_parser.so +0 -0
  110. data/lib/expressir/express/2.6/express_parser.so +0 -0
  111. data/lib/expressir/model/attribute.rb +0 -38
  112. data/lib/expressir/model/constant.rb +0 -28
  113. data/lib/expressir/model/entity.rb +0 -42
  114. data/lib/expressir/model/enumeration_item.rb +0 -22
  115. data/lib/expressir/model/expressions/aggregate_item.rb +0 -17
  116. data/lib/expressir/model/expressions/attribute_reference.rb +0 -17
  117. data/lib/expressir/model/expressions/call.rb +0 -17
  118. data/lib/expressir/model/expressions/group_reference.rb +0 -17
  119. data/lib/expressir/model/expressions/index_reference.rb +0 -19
  120. data/lib/expressir/model/expressions/simple_reference.rb +0 -19
  121. data/lib/expressir/model/function.rb +0 -57
  122. data/lib/expressir/model/interface.rb +0 -20
  123. data/lib/expressir/model/interface_item.rb +0 -15
  124. data/lib/expressir/model/interfaced_item.rb +0 -27
  125. data/lib/expressir/model/parameter.rb +0 -28
  126. data/lib/expressir/model/procedure.rb +0 -55
  127. data/lib/expressir/model/remark_item.rb +0 -15
  128. data/lib/expressir/model/rule.rb +0 -60
  129. data/lib/expressir/model/schema.rb +0 -100
  130. data/lib/expressir/model/schema_version.rb +0 -15
  131. data/lib/expressir/model/schema_version_item.rb +0 -15
  132. data/lib/expressir/model/statements/call.rb +0 -17
  133. data/lib/expressir/model/subtype_constraint.rb +0 -32
  134. data/lib/expressir/model/type.rb +0 -37
  135. data/lib/expressir/model/types/aggregate.rb +0 -28
  136. data/lib/expressir/model/types/array.rb +0 -23
  137. data/lib/expressir/model/types/bag.rb +0 -19
  138. data/lib/expressir/model/types/binary.rb +0 -17
  139. data/lib/expressir/model/types/boolean.rb +0 -8
  140. data/lib/expressir/model/types/enumeration.rb +0 -19
  141. data/lib/expressir/model/types/generic.rb +0 -24
  142. data/lib/expressir/model/types/generic_entity.rb +0 -24
  143. data/lib/expressir/model/types/integer.rb +0 -8
  144. data/lib/expressir/model/types/list.rb +0 -21
  145. data/lib/expressir/model/types/logical.rb +0 -8
  146. data/lib/expressir/model/types/number.rb +0 -8
  147. data/lib/expressir/model/types/real.rb +0 -15
  148. data/lib/expressir/model/types/select.rb +0 -21
  149. data/lib/expressir/model/types/set.rb +0 -19
  150. data/lib/expressir/model/types/string.rb +0 -17
  151. data/lib/expressir/model/unique_rule.rb +0 -26
  152. data/lib/expressir/model/variable.rb +0 -28
  153. data/lib/expressir/model/where_rule.rb +0 -26
@@ -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 Call
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
- def initialize(tokens, options = {})
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 = options[: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::Expressions::SimpleReference.new({
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::Expressions::SimpleReference.new({
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::Expressions::SimpleReference.new({
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::Expressions::SimpleReference.new({
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::Expressions::SimpleReference.new({
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::Expressions::SimpleReference.new({
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::Expressions::SimpleReference.new({
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::Expressions::SimpleReference.new({
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::Expressions::SimpleReference.new({
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::Expressions::SimpleReference.new({
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::Expressions::SimpleReference.new({
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::Expressions::SimpleReference.new({
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::Expressions::SimpleReference.new({
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::Expressions::SimpleReference.new({
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::Types::Aggregate.new({
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::Types::Array.new({
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::Expressions::AttributeReference.new({
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::Types::Bag.new({
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::Types::Binary.new({
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::Types::Boolean.new
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::Expressions::SimpleReference.new({
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::Expressions::SimpleReference.new({
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::Expressions::SimpleReference.new({
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::AggregateItem.new({
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
- ref = visit_if(ctx__entity_ref)
734
+ entity = visit_if(ctx__entity_ref)
729
735
  parameters = visit_if_map(ctx__expression)
730
736
 
731
- Model::Expressions::Call.new({
732
- ref: ref,
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::Expressions::AttributeReference.new({
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::Types::Enumeration.new({
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
- ref = visit_if(ctx__built_in_function || ctx__function_ref)
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::Call.new({
934
- ref: ref,
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::Types::Array.new({
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::Types::Bag.new({
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::Types::List.new({
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::Types::Set.new({
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::Types::GenericEntity.new({
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::Types::Generic.new({
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::Expressions::GroupReference.new({
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::Expressions::IndexReference.new({
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::Types::Integer.new
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::BinaryExpression::LESS_THAN
1270
+ Model::Expressions::Interval::LESS_THAN
1261
1271
  elsif ctx__LESS_THAN_OR_EQUAL
1262
- Model::Expressions::BinaryExpression::LESS_THAN_OR_EQUAL
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::Expressions::AttributeReference.new({
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::Types::Set.new({
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::Types::Bag.new({
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::Types::List.new({
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::Types::Logical.new
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::Types::Number.new
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
- ref = Model::Expressions::SimpleReference.new({ id: 'ONEOF' })
1497
- parameters = visit_if_map(ctx__supertype_expression)
1506
+ operands = visit_if_map(ctx__supertype_expression)
1498
1507
 
1499
- Model::Expressions::Call.new({
1500
- ref: ref,
1501
- parameters: parameters
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
- ref = visit_if(ctx__built_in_procedure || ctx__procedure_ref)
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::Call.new({
1560
- ref: ref,
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::Expressions::AttributeReference.new({
1649
- ref: Model::Expressions::GroupReference.new({
1650
- ref: Model::Expressions::SimpleReference.new({
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::Types::Real.new({
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::Types::Select.new({
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::Types::Set.new({
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::Types::String.new({
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::Expressions::BinaryExpression::ANDOR}
2228
+ operators = ctx__ANDOR.map{Model::SupertypeExpressions::BinarySupertypeExpression::ANDOR}
2221
2229
 
2222
- handle_binary_expression(operands, operators)
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::Expressions::BinaryExpression::AND}
2250
+ operators = ctx__AND.map{Model::SupertypeExpressions::BinarySupertypeExpression::AND}
2243
2251
 
2244
- handle_binary_expression(operands, operators)
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::Expressions::BinaryExpression.new({
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::Expressions::AttributeReference.new({
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::Expressions::GroupReference.new({
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::Expressions::IndexReference.new({
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