expressir 0.2.3 → 0.2.4
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.
- checksums.yaml +4 -4
- data/.github/workflows/rake.yml +46 -0
- data/.github/workflows/release.yml +74 -0
- data/.gitignore +1 -2
- data/.gitmodules +3 -0
- data/Gemfile +2 -0
- data/Rakefile +20 -0
- data/exe/generate-parser +48 -0
- data/expressir.gemspec +5 -2
- data/ext/express-parser/antlrgen/Express.interp +532 -0
- data/ext/express-parser/antlrgen/Express.tokens +190 -0
- data/ext/express-parser/antlrgen/ExpressBaseListener.cpp +7 -0
- data/ext/express-parser/antlrgen/ExpressBaseListener.h +623 -0
- data/ext/express-parser/antlrgen/ExpressBaseVisitor.cpp +7 -0
- data/ext/express-parser/antlrgen/ExpressBaseVisitor.h +816 -0
- data/ext/express-parser/antlrgen/ExpressLexer.cpp +1169 -0
- data/ext/express-parser/antlrgen/ExpressLexer.h +85 -0
- data/ext/express-parser/antlrgen/ExpressLexer.interp +534 -0
- data/ext/express-parser/antlrgen/ExpressLexer.tokens +190 -0
- data/ext/express-parser/antlrgen/ExpressListener.cpp +7 -0
- data/ext/express-parser/antlrgen/ExpressListener.h +616 -0
- data/ext/express-parser/antlrgen/ExpressParser.cpp +17284 -0
- data/ext/express-parser/antlrgen/ExpressParser.h +3696 -0
- data/ext/express-parser/antlrgen/ExpressVisitor.cpp +7 -0
- data/ext/express-parser/antlrgen/ExpressVisitor.h +422 -0
- data/ext/express-parser/express_parser.cpp +17931 -0
- data/ext/express-parser/extconf.rb +34 -0
- data/lib/expressir/express_exp/formatter.rb +50 -44
- data/lib/expressir/express_exp/parser.rb +12 -6
- data/lib/expressir/express_exp/visitor.rb +1377 -1068
- data/lib/expressir/model.rb +3 -0
- data/lib/expressir/model/attribute.rb +4 -5
- data/lib/expressir/model/constant.rb +3 -4
- data/lib/expressir/model/entity.rb +4 -4
- data/lib/expressir/model/enumeration_item.rb +1 -4
- data/lib/expressir/model/expressions/query_expression.rb +4 -4
- data/lib/expressir/model/function.rb +4 -4
- data/lib/expressir/model/identifier.rb +9 -0
- data/lib/expressir/model/parameter.rb +4 -5
- data/lib/expressir/model/procedure.rb +4 -4
- data/lib/expressir/model/repository.rb +2 -0
- data/lib/expressir/model/rule.rb +4 -4
- data/lib/expressir/model/schema.rb +3 -3
- data/lib/expressir/model/scope.rb +17 -0
- data/lib/expressir/model/statements/alias.rb +4 -4
- data/lib/expressir/model/statements/repeat.rb +4 -4
- data/lib/expressir/model/subtype_constraint.rb +9 -4
- data/lib/expressir/model/type.rb +4 -4
- data/lib/expressir/model/types/aggregate.rb +4 -5
- data/lib/expressir/model/types/generic.rb +2 -5
- data/lib/expressir/model/types/generic_entity.rb +2 -5
- data/lib/expressir/model/unique.rb +3 -4
- data/lib/expressir/model/variable.rb +3 -4
- data/lib/expressir/model/where.rb +3 -4
- data/lib/expressir/version.rb +1 -1
- data/original/examples/syntax/remark_formatted.exp +73 -71
- data/original/examples/syntax/syntax_formatted.exp +109 -98
- data/spec/expressir/express_exp/ap233_spec.rb +1 -1
- data/spec/expressir/express_exp/parse_syntax_spec.rb +30 -30
- data/spec/expressir/model/find_spec.rb +110 -0
- metadata +61 -15
- data/.github/workflows/macos.yml +0 -38
- data/.github/workflows/ubuntu.yml +0 -56
- data/.github/workflows/windows.yml +0 -40
- data/generate-parser.sh +0 -29
- data/lib/expressir/express_exp/generated/ExpressBaseVisitor.rb +0 -779
- data/lib/expressir/express_exp/generated/ExpressLexer.rb +0 -844
- data/lib/expressir/express_exp/generated/ExpressParser.rb +0 -12162
- data/lib/expressir/express_exp/generated/ExpressVisitor.rb +0 -394
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'mkmf-rice'
|
2
|
+
|
3
|
+
extension_name = 'express_parser'
|
4
|
+
dir_config(extension_name)
|
5
|
+
|
6
|
+
have_library('stdc++')
|
7
|
+
|
8
|
+
$CFLAGS << ' -std=c++14 -DANTLR4CPP_STATIC'
|
9
|
+
|
10
|
+
include_paths = [
|
11
|
+
'.',
|
12
|
+
'antlrgen',
|
13
|
+
'antlr4-upstream/runtime/Cpp/runtime/src',
|
14
|
+
'antlr4-upstream/runtime/Cpp/runtime/src/atn',
|
15
|
+
'antlr4-upstream/runtime/Cpp/runtime/src/dfa',
|
16
|
+
'antlr4-upstream/runtime/Cpp/runtime/src/misc',
|
17
|
+
'antlr4-upstream/runtime/Cpp/runtime/src/support',
|
18
|
+
'antlr4-upstream/runtime/Cpp/runtime/src/tree',
|
19
|
+
'antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern',
|
20
|
+
'antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath'
|
21
|
+
]
|
22
|
+
|
23
|
+
$srcs = []
|
24
|
+
|
25
|
+
include_paths.each do |include_path|
|
26
|
+
$INCFLAGS << " -I#{__dir__}/#{include_path}"
|
27
|
+
$VPATH << "#{__dir__}/#{include_path}"
|
28
|
+
|
29
|
+
Dir.glob("#{__dir__}/#{include_path}/*.cpp").each do |path|
|
30
|
+
$srcs << path
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
create_makefile(extension_name)
|
@@ -171,17 +171,6 @@ module Expressir
|
|
171
171
|
|
172
172
|
def format_attribute(node)
|
173
173
|
[
|
174
|
-
*if node.kind == Model::Attribute::DERIVED
|
175
|
-
[
|
176
|
-
'DERIVE',
|
177
|
-
' '
|
178
|
-
].join('')
|
179
|
-
elsif node.kind == Model::Attribute::INVERSE
|
180
|
-
[
|
181
|
-
'INVERSE',
|
182
|
-
' '
|
183
|
-
].join('')
|
184
|
-
end,
|
185
174
|
*if node.supertype_attribute
|
186
175
|
[
|
187
176
|
format(node.supertype_attribute),
|
@@ -252,7 +241,7 @@ module Expressir
|
|
252
241
|
*if node.abstract and !node.supertype_expression
|
253
242
|
[
|
254
243
|
"\n",
|
255
|
-
|
244
|
+
INDENT,
|
256
245
|
'ABSTRACT',
|
257
246
|
' ',
|
258
247
|
'SUPERTYPE'
|
@@ -261,7 +250,7 @@ module Expressir
|
|
261
250
|
*if node.abstract and node.supertype_expression
|
262
251
|
[
|
263
252
|
"\n",
|
264
|
-
|
253
|
+
INDENT,
|
265
254
|
'ABSTRACT',
|
266
255
|
' ',
|
267
256
|
'SUPERTYPE',
|
@@ -276,7 +265,7 @@ module Expressir
|
|
276
265
|
*if !node.abstract and node.supertype_expression
|
277
266
|
[
|
278
267
|
"\n",
|
279
|
-
|
268
|
+
INDENT,
|
280
269
|
'SUPERTYPE',
|
281
270
|
' ',
|
282
271
|
'OF',
|
@@ -289,7 +278,7 @@ module Expressir
|
|
289
278
|
*if node.subtype_of and node.subtype_of.length > 0
|
290
279
|
[
|
291
280
|
"\n",
|
292
|
-
|
281
|
+
INDENT,
|
293
282
|
'SUBTYPE',
|
294
283
|
' ',
|
295
284
|
'OF',
|
@@ -301,8 +290,20 @@ module Expressir
|
|
301
290
|
end,
|
302
291
|
';'
|
303
292
|
].join(''),
|
304
|
-
*if node.
|
305
|
-
indent(node.
|
293
|
+
*if node.explicit_attributes and node.explicit_attributes.length > 0
|
294
|
+
indent(node.explicit_attributes.map{|x| format(x)}.join("\n"))
|
295
|
+
end,
|
296
|
+
*if node.derived_attributes and node.derived_attributes.length > 0
|
297
|
+
indent([
|
298
|
+
'DERIVE',
|
299
|
+
indent(node.derived_attributes.map{|x| format(x)}.join("\n")),
|
300
|
+
].join("\n"))
|
301
|
+
end,
|
302
|
+
*if node.inverse_attributes and node.inverse_attributes.length > 0
|
303
|
+
indent([
|
304
|
+
'INVERSE',
|
305
|
+
indent(node.inverse_attributes.map{|x| format(x)}.join("\n")),
|
306
|
+
].join("\n"))
|
306
307
|
end,
|
307
308
|
*if node.unique and node.unique.length > 0
|
308
309
|
indent([
|
@@ -316,7 +317,6 @@ module Expressir
|
|
316
317
|
indent(node.where.map{|x| format(x)}.join("\n")),
|
317
318
|
].join("\n"))
|
318
319
|
end,
|
319
|
-
*format_scope_remarks(node),
|
320
320
|
[
|
321
321
|
'END_ENTITY',
|
322
322
|
';'
|
@@ -373,7 +373,6 @@ module Expressir
|
|
373
373
|
*if node.statements and node.statements.length > 0
|
374
374
|
indent(node.statements.map{|x| format(x)}.join("\n"))
|
375
375
|
end,
|
376
|
-
*format_scope_remarks(node),
|
377
376
|
[
|
378
377
|
'END_FUNCTION',
|
379
378
|
';'
|
@@ -394,7 +393,7 @@ module Expressir
|
|
394
393
|
*if node.items and node.items.length > 0
|
395
394
|
[
|
396
395
|
"\n",
|
397
|
-
|
396
|
+
INDENT,
|
398
397
|
'(',
|
399
398
|
node.items.map{|x| format(x)},
|
400
399
|
')'
|
@@ -461,7 +460,6 @@ module Expressir
|
|
461
460
|
*if node.statements and node.statements.length > 0
|
462
461
|
indent(node.statements.map{|x| format(x)}.join("\n"))
|
463
462
|
end,
|
464
|
-
*format_scope_remarks(node),
|
465
463
|
[
|
466
464
|
'END_PROCEDURE',
|
467
465
|
';'
|
@@ -534,7 +532,6 @@ module Expressir
|
|
534
532
|
indent(node.where.map{|x| format(x)}.join("\n"))
|
535
533
|
].join("\n"))
|
536
534
|
end,
|
537
|
-
*format_scope_remarks(node),
|
538
535
|
[
|
539
536
|
'END_RULE',
|
540
537
|
';'
|
@@ -572,7 +569,6 @@ module Expressir
|
|
572
569
|
*if node.declarations and node.declarations.length > 0
|
573
570
|
node.declarations.map{|x| format(x)}.join("\n\n")
|
574
571
|
end,
|
575
|
-
*format_scope_remarks(node),
|
576
572
|
[
|
577
573
|
'END_SCHEMA',
|
578
574
|
';'
|
@@ -640,7 +636,6 @@ module Expressir
|
|
640
636
|
indent(node.where.map{|x| format(x)}.join("\n"))
|
641
637
|
].join("\n"))
|
642
638
|
end,
|
643
|
-
*format_scope_remarks(node),
|
644
639
|
[
|
645
640
|
'END_TYPE',
|
646
641
|
';'
|
@@ -842,7 +837,7 @@ module Expressir
|
|
842
837
|
'|',
|
843
838
|
' ',
|
844
839
|
format(node.expression),
|
845
|
-
*
|
840
|
+
*format_remarks(node).instance_eval{|x| x.length > 0 ? ["\n", *x, "\n"] : x},
|
846
841
|
')'
|
847
842
|
].join('')
|
848
843
|
end
|
@@ -925,7 +920,7 @@ module Expressir
|
|
925
920
|
*if node.statements and node.statements.length > 0
|
926
921
|
indent(node.statements.map{|x| format(x)}.join("\n"))
|
927
922
|
end,
|
928
|
-
*
|
923
|
+
*format_remarks(node),
|
929
924
|
[
|
930
925
|
'END_ALIAS',
|
931
926
|
';'
|
@@ -1094,7 +1089,7 @@ module Expressir
|
|
1094
1089
|
*if node.statements and node.statements.length > 0
|
1095
1090
|
indent(node.statements.map{|x| format(x)}.join("\n"))
|
1096
1091
|
end,
|
1097
|
-
*
|
1092
|
+
*format_remarks(node),
|
1098
1093
|
[
|
1099
1094
|
'END_REPEAT',
|
1100
1095
|
';'
|
@@ -1392,6 +1387,18 @@ module Expressir
|
|
1392
1387
|
str.split("\n").map{|x| "#{INDENT}#{x}"}.join("\n")
|
1393
1388
|
end
|
1394
1389
|
|
1390
|
+
def format_remark_ref(node)
|
1391
|
+
[
|
1392
|
+
*if node.class.method_defined? :parent and node.parent.class.method_defined? :id and node.parent != node
|
1393
|
+
[
|
1394
|
+
format_remark_ref(node.parent),
|
1395
|
+
'.'
|
1396
|
+
].join('')
|
1397
|
+
end,
|
1398
|
+
node.id,
|
1399
|
+
].join('')
|
1400
|
+
end
|
1401
|
+
|
1395
1402
|
def format_remark(node, remark)
|
1396
1403
|
if remark.include?("\n")
|
1397
1404
|
[
|
@@ -1416,28 +1423,27 @@ module Expressir
|
|
1416
1423
|
end
|
1417
1424
|
end
|
1418
1425
|
|
1419
|
-
def
|
1420
|
-
|
1421
|
-
|
1422
|
-
|
1423
|
-
|
1424
|
-
|
1425
|
-
|
1426
|
-
|
1427
|
-
node.id,
|
1428
|
-
].join('')
|
1426
|
+
def format_remarks(node)
|
1427
|
+
if node.class.method_defined? :remarks and node.remarks and node.remarks.length > 0
|
1428
|
+
node.remarks.map do |remark|
|
1429
|
+
format_remark(node, remark)
|
1430
|
+
end
|
1431
|
+
else
|
1432
|
+
[]
|
1433
|
+
end
|
1429
1434
|
end
|
1430
1435
|
|
1431
1436
|
def format_scope_remarks(node)
|
1432
|
-
|
1433
|
-
|
1434
|
-
|
1435
|
-
|
1437
|
+
[
|
1438
|
+
*format_remarks(node),
|
1439
|
+
*if node.class.method_defined? :children
|
1440
|
+
node.children.flat_map do |x|
|
1441
|
+
if x != node
|
1442
|
+
format_scope_remarks(x)
|
1443
|
+
end
|
1436
1444
|
end
|
1437
|
-
else
|
1438
|
-
[]
|
1439
1445
|
end
|
1440
|
-
|
1446
|
+
]
|
1441
1447
|
end
|
1442
1448
|
end
|
1443
1449
|
end
|
@@ -1,7 +1,4 @@
|
|
1
|
-
require '
|
2
|
-
require 'expressir/express_exp/generated/ExpressVisitor'
|
3
|
-
require 'expressir/express_exp/generated/ExpressLexer'
|
4
|
-
require 'expressir/express_exp/generated/ExpressParser'
|
1
|
+
require 'express_parser'
|
5
2
|
require 'expressir/express_exp/visitor'
|
6
3
|
|
7
4
|
module Expressir
|
@@ -10,10 +7,11 @@ module Expressir
|
|
10
7
|
def self.from_exp(file)
|
11
8
|
input = File.read(file)
|
12
9
|
|
10
|
+
=begin
|
13
11
|
char_stream = Antlr4::Runtime::CharStreams.from_string(input, 'String')
|
14
|
-
lexer =
|
12
|
+
lexer = ::ExpressParser::Lexer.new(char_stream)
|
15
13
|
token_stream = Antlr4::Runtime::CommonTokenStream.new(lexer)
|
16
|
-
parser =
|
14
|
+
parser = ::ExpressParser::Parser.new(token_stream)
|
17
15
|
|
18
16
|
# don't attempt to recover from any parsing error
|
19
17
|
parser.instance_variable_set(:@_err_handler, Antlr4::Runtime::BailErrorStrategy.new)
|
@@ -22,6 +20,14 @@ module Expressir
|
|
22
20
|
|
23
21
|
visitor = Visitor.new(token_stream)
|
24
22
|
repo = visitor.visit(parse_tree)
|
23
|
+
=end
|
24
|
+
|
25
|
+
parser = ::ExpressParser::Parser.parse(input)
|
26
|
+
|
27
|
+
parse_tree = parser.syntax()
|
28
|
+
|
29
|
+
visitor = Visitor.new(parser.tokens)
|
30
|
+
repo = visitor.visit(parse_tree)
|
25
31
|
|
26
32
|
repo
|
27
33
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require '
|
1
|
+
require 'express_parser'
|
2
2
|
require 'expressir/model'
|
3
3
|
|
4
4
|
# static shorthands are unwrapped
|
@@ -23,12 +23,14 @@ require 'expressir/model'
|
|
23
23
|
|
24
24
|
module Expressir
|
25
25
|
module ExpressExp
|
26
|
-
class Visitor <
|
26
|
+
class Visitor < ::ExpressParser::Visitor
|
27
27
|
REMARK_CHANNEL = 2
|
28
28
|
|
29
29
|
def initialize(tokens)
|
30
30
|
@tokens = tokens
|
31
31
|
@attached_remarks = Set.new
|
32
|
+
|
33
|
+
super()
|
32
34
|
end
|
33
35
|
|
34
36
|
def visit(ctx)
|
@@ -38,6 +40,18 @@ module Expressir
|
|
38
40
|
result
|
39
41
|
end
|
40
42
|
|
43
|
+
def visit_if(ctx)
|
44
|
+
visit(ctx) if ctx
|
45
|
+
end
|
46
|
+
|
47
|
+
def visit_if_map(ctx)
|
48
|
+
ctx.map{|ctx2| visit(ctx2)} if ctx
|
49
|
+
end
|
50
|
+
|
51
|
+
def visit_if_map_flatten(ctx)
|
52
|
+
ctx.map{|ctx2| visit(ctx2)}.flatten if ctx
|
53
|
+
end
|
54
|
+
|
41
55
|
def attach_parent(ctx, node)
|
42
56
|
if node.class.method_defined? :children
|
43
57
|
node.children.each do |child_node|
|
@@ -50,14 +64,14 @@ module Expressir
|
|
50
64
|
|
51
65
|
def attach_remarks(ctx, node)
|
52
66
|
# get remark tokens
|
53
|
-
start_index, stop_index = if ctx.instance_of?
|
67
|
+
start_index, stop_index = if ctx.instance_of? ::ExpressParser::SyntaxContext
|
54
68
|
[0, @tokens.size - 1]
|
55
69
|
else
|
56
70
|
[ctx.start.token_index, ctx.stop.token_index]
|
57
71
|
end
|
58
72
|
# puts [start_index, stop_index, ctx.class].inspect
|
59
73
|
|
60
|
-
remark_tokens = @tokens
|
74
|
+
remark_tokens = @tokens[start_index..stop_index].select{|x| x.channel == REMARK_CHANNEL}
|
61
75
|
if remark_tokens
|
62
76
|
remark_tokens.each do |remark_token|
|
63
77
|
remark_text = remark_token.text
|
@@ -78,26 +92,22 @@ module Expressir
|
|
78
92
|
end
|
79
93
|
|
80
94
|
# attach tagged remark
|
81
|
-
remark_tag = match[1]
|
95
|
+
remark_tag = match[1]
|
82
96
|
remark_content = match[2].strip
|
83
97
|
|
98
|
+
target_node = nil
|
84
99
|
current_node = node
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
break
|
92
|
-
end
|
93
|
-
else
|
94
|
-
break
|
95
|
-
end
|
100
|
+
if current_node.class.method_defined? :find
|
101
|
+
target_node = current_node.find(remark_tag)
|
102
|
+
end
|
103
|
+
while !target_node and current_node.class.method_defined? :parent and current_node.parent.class.method_defined? :find
|
104
|
+
current_node = current_node.parent
|
105
|
+
target_node = current_node.find(remark_tag)
|
96
106
|
end
|
97
107
|
|
98
|
-
if
|
99
|
-
|
100
|
-
|
108
|
+
if target_node
|
109
|
+
target_node.remarks ||= []
|
110
|
+
target_node.remarks << remark_content
|
101
111
|
|
102
112
|
# mark remark as attached, so that it is not attached again at higher nesting level
|
103
113
|
@attached_remarks << remark_token
|
@@ -106,194 +116,237 @@ module Expressir
|
|
106
116
|
end
|
107
117
|
end
|
108
118
|
|
109
|
-
def
|
110
|
-
|
119
|
+
def visit_attribute_ref(ctx)
|
120
|
+
ctx__attribute_id = ctx.attribute_id
|
121
|
+
|
122
|
+
id = visit_if(ctx__attribute_id)
|
111
123
|
|
112
124
|
Model::Expressions::SimpleReference.new({
|
113
125
|
id: id
|
114
126
|
})
|
115
127
|
end
|
116
128
|
|
117
|
-
def
|
118
|
-
|
129
|
+
def visit_constant_ref(ctx)
|
130
|
+
ctx__constant_id = ctx.constant_id
|
131
|
+
|
132
|
+
id = visit_if(ctx__constant_id)
|
119
133
|
|
120
134
|
Model::Expressions::SimpleReference.new({
|
121
135
|
id: id
|
122
136
|
})
|
123
137
|
end
|
124
138
|
|
125
|
-
def
|
126
|
-
|
139
|
+
def visit_entity_ref(ctx)
|
140
|
+
ctx__entity_id = ctx.entity_id
|
141
|
+
|
142
|
+
id = visit_if(ctx__entity_id)
|
127
143
|
|
128
144
|
Model::Expressions::SimpleReference.new({
|
129
145
|
id: id
|
130
146
|
})
|
131
147
|
end
|
132
148
|
|
133
|
-
def
|
134
|
-
|
149
|
+
def visit_enumeration_ref(ctx)
|
150
|
+
ctx__enumeration_id = ctx.enumeration_id
|
151
|
+
|
152
|
+
id = visit_if(ctx__enumeration_id)
|
135
153
|
|
136
154
|
Model::Expressions::SimpleReference.new({
|
137
155
|
id: id
|
138
156
|
})
|
139
157
|
end
|
140
158
|
|
141
|
-
def
|
142
|
-
|
159
|
+
def visit_function_ref(ctx)
|
160
|
+
ctx__function_id = ctx.function_id
|
161
|
+
|
162
|
+
id = visit_if(ctx__function_id)
|
143
163
|
|
144
164
|
Model::Expressions::SimpleReference.new({
|
145
165
|
id: id
|
146
166
|
})
|
147
167
|
end
|
148
168
|
|
149
|
-
def
|
150
|
-
|
169
|
+
def visit_parameter_ref(ctx)
|
170
|
+
ctx__parameter_id = ctx.parameter_id
|
171
|
+
|
172
|
+
id = visit_if(ctx__parameter_id)
|
151
173
|
|
152
174
|
Model::Expressions::SimpleReference.new({
|
153
175
|
id: id
|
154
176
|
})
|
155
177
|
end
|
156
178
|
|
157
|
-
def
|
158
|
-
|
179
|
+
def visit_procedure_ref(ctx)
|
180
|
+
ctx__procedure_id = ctx.procedure_id
|
181
|
+
|
182
|
+
id = visit_if(ctx__procedure_id)
|
159
183
|
|
160
184
|
Model::Expressions::SimpleReference.new({
|
161
185
|
id: id
|
162
186
|
})
|
163
187
|
end
|
164
188
|
|
165
|
-
def
|
166
|
-
|
189
|
+
def visit_rule_label_ref(ctx)
|
190
|
+
ctx__rule_label_id = ctx.rule_label_id
|
191
|
+
|
192
|
+
id = visit_if(ctx__rule_label_id)
|
167
193
|
|
168
194
|
Model::Expressions::SimpleReference.new({
|
169
195
|
id: id
|
170
196
|
})
|
171
197
|
end
|
172
198
|
|
173
|
-
def
|
174
|
-
|
199
|
+
def visit_rule_ref(ctx)
|
200
|
+
ctx__rule_id = ctx.rule_id
|
201
|
+
|
202
|
+
id = visit_if(ctx__rule_id)
|
175
203
|
|
176
204
|
Model::Expressions::SimpleReference.new({
|
177
205
|
id: id
|
178
206
|
})
|
179
207
|
end
|
180
208
|
|
181
|
-
def
|
182
|
-
|
209
|
+
def visit_schema_ref(ctx)
|
210
|
+
ctx__schema_id = ctx.schema_id
|
211
|
+
|
212
|
+
id = visit_if(ctx__schema_id)
|
183
213
|
|
184
214
|
Model::Expressions::SimpleReference.new({
|
185
215
|
id: id
|
186
216
|
})
|
187
217
|
end
|
188
218
|
|
189
|
-
def
|
190
|
-
|
219
|
+
def visit_subtype_constraint_ref(ctx)
|
220
|
+
ctx__subtype_constraint_id = ctx.subtype_constraint_id
|
221
|
+
|
222
|
+
id = visit_if(ctx__subtype_constraint_id)
|
191
223
|
|
192
224
|
Model::Expressions::SimpleReference.new({
|
193
225
|
id: id
|
194
226
|
})
|
195
227
|
end
|
196
228
|
|
197
|
-
def
|
198
|
-
|
229
|
+
def visit_type_label_ref(ctx)
|
230
|
+
ctx__type_label_id = ctx.type_label_id
|
231
|
+
|
232
|
+
id = visit_if(ctx__type_label_id)
|
199
233
|
|
200
234
|
Model::Expressions::SimpleReference.new({
|
201
235
|
id: id
|
202
236
|
})
|
203
237
|
end
|
204
238
|
|
205
|
-
def
|
206
|
-
|
239
|
+
def visit_type_ref(ctx)
|
240
|
+
ctx__type_id = ctx.type_id
|
241
|
+
|
242
|
+
id = visit_if(ctx__type_id)
|
207
243
|
|
208
244
|
Model::Expressions::SimpleReference.new({
|
209
245
|
id: id
|
210
246
|
})
|
211
247
|
end
|
212
248
|
|
213
|
-
def
|
214
|
-
|
249
|
+
def visit_variable_ref(ctx)
|
250
|
+
ctx__variable_id = ctx.variable_id
|
251
|
+
|
252
|
+
id = visit_if(ctx__variable_id)
|
215
253
|
|
216
254
|
Model::Expressions::SimpleReference.new({
|
217
255
|
id: id
|
218
256
|
})
|
219
257
|
end
|
220
258
|
|
221
|
-
def
|
259
|
+
def visit_abstract_entity_declaration(ctx)
|
222
260
|
raise 'Invalid state'
|
223
261
|
end
|
224
262
|
|
225
|
-
def
|
263
|
+
def visit_abstract_supertype(ctx)
|
226
264
|
raise 'Invalid state'
|
227
265
|
end
|
228
266
|
|
229
|
-
def
|
230
|
-
|
267
|
+
def visit_abstract_supertype_declaration(ctx)
|
268
|
+
ctx__subtype_constraint = ctx.subtype_constraint
|
269
|
+
|
270
|
+
visit_if(ctx__subtype_constraint)
|
231
271
|
end
|
232
272
|
|
233
|
-
def
|
234
|
-
|
273
|
+
def visit_actual_parameter_list(ctx)
|
274
|
+
ctx__parameter = ctx.parameter
|
275
|
+
|
276
|
+
visit_if_map(ctx__parameter)
|
235
277
|
end
|
236
278
|
|
237
|
-
def
|
238
|
-
|
279
|
+
def visit_add_like_op(ctx)
|
280
|
+
ctx__text = ctx.text
|
281
|
+
ctx__ADDITION = ctx__text == '+'
|
282
|
+
ctx__SUBTRACTION = ctx__text == '-'
|
283
|
+
ctx__OR = ctx.OR
|
284
|
+
ctx__XOR = ctx.XOR
|
285
|
+
|
286
|
+
if ctx__ADDITION
|
239
287
|
Model::Expressions::BinaryExpression::ADDITION
|
240
|
-
elsif
|
288
|
+
elsif ctx__SUBTRACTION
|
241
289
|
Model::Expressions::BinaryExpression::SUBTRACTION
|
242
|
-
elsif
|
290
|
+
elsif ctx__OR
|
243
291
|
Model::Expressions::BinaryExpression::OR
|
244
|
-
elsif
|
292
|
+
elsif ctx__XOR
|
245
293
|
Model::Expressions::BinaryExpression::XOR
|
246
294
|
else
|
247
295
|
raise 'Invalid state'
|
248
296
|
end
|
249
297
|
end
|
250
298
|
|
251
|
-
def
|
252
|
-
|
299
|
+
def visit_aggregate_initializer(ctx)
|
300
|
+
ctx__element = ctx.element
|
301
|
+
|
302
|
+
items = visit_if_map(ctx__element)
|
253
303
|
|
254
304
|
Model::Expressions::AggregateInitializer.new({
|
255
305
|
items: items
|
256
306
|
})
|
257
307
|
end
|
258
308
|
|
259
|
-
def
|
260
|
-
|
309
|
+
def visit_aggregate_source(ctx)
|
310
|
+
ctx__simple_expression = ctx.simple_expression
|
311
|
+
|
312
|
+
visit_if(ctx__simple_expression)
|
261
313
|
end
|
262
314
|
|
263
|
-
def
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
315
|
+
def visit_aggregate_type(ctx)
|
316
|
+
ctx__type_label = ctx.type_label
|
317
|
+
ctx__parameter_type = ctx.parameter_type
|
318
|
+
|
319
|
+
id = visit_if(ctx__type_label)
|
320
|
+
base_type = visit_if(ctx__parameter_type)
|
268
321
|
|
269
322
|
Model::Types::Aggregate.new({
|
270
|
-
|
323
|
+
id: id,
|
271
324
|
base_type: base_type
|
272
325
|
})
|
273
326
|
end
|
274
327
|
|
275
|
-
def
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
elsif ctx.setType()
|
283
|
-
visit(ctx.setType())
|
284
|
-
else
|
285
|
-
raise 'Invalid state'
|
286
|
-
end
|
328
|
+
def visit_aggregation_types(ctx)
|
329
|
+
ctx__array_type = ctx.array_type
|
330
|
+
ctx__bag_type = ctx.bag_type
|
331
|
+
ctx__list_type = ctx.list_type
|
332
|
+
ctx__set_type = ctx.set_type
|
333
|
+
|
334
|
+
visit_if(ctx__array_type || ctx__bag_type || ctx__list_type || ctx__set_type)
|
287
335
|
end
|
288
336
|
|
289
|
-
def
|
337
|
+
def visit_algorithm_head(ctx)
|
290
338
|
raise 'Invalid state'
|
291
339
|
end
|
292
340
|
|
293
|
-
def
|
294
|
-
|
295
|
-
|
296
|
-
|
341
|
+
def visit_alias_stmt(ctx)
|
342
|
+
ctx__variable_id = ctx.variable_id
|
343
|
+
ctx__general_ref = ctx.general_ref
|
344
|
+
ctx__qualifier = ctx.qualifier
|
345
|
+
ctx__stmt = ctx.stmt
|
346
|
+
|
347
|
+
id = visit_if(ctx__variable_id)
|
348
|
+
expression = handle_qualified_ref(visit_if(ctx__general_ref), ctx__qualifier)
|
349
|
+
statements = visit_if_map(ctx__stmt)
|
297
350
|
|
298
351
|
Model::Statements::Alias.new({
|
299
352
|
id: id,
|
@@ -302,12 +355,19 @@ module Expressir
|
|
302
355
|
})
|
303
356
|
end
|
304
357
|
|
305
|
-
def
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
358
|
+
def visit_array_type(ctx)
|
359
|
+
ctx__bound_spec = ctx.bound_spec
|
360
|
+
ctx__OPTIONAL = ctx.OPTIONAL
|
361
|
+
ctx__UNIQUE = ctx.UNIQUE
|
362
|
+
ctx__instantiable_type = ctx.instantiable_type
|
363
|
+
ctx__bound_spec__bound1 = ctx__bound_spec&.bound1
|
364
|
+
ctx__bound_spec__bound2 = ctx__bound_spec&.bound2
|
365
|
+
|
366
|
+
bound1 = visit_if(ctx__bound_spec__bound1)
|
367
|
+
bound2 = visit_if(ctx__bound_spec__bound2)
|
368
|
+
optional = !!ctx__OPTIONAL
|
369
|
+
unique = !!ctx__UNIQUE
|
370
|
+
base_type = visit_if(ctx__instantiable_type)
|
311
371
|
|
312
372
|
Model::Types::Array.new({
|
313
373
|
bound1: bound1,
|
@@ -318,9 +378,13 @@ module Expressir
|
|
318
378
|
})
|
319
379
|
end
|
320
380
|
|
321
|
-
def
|
322
|
-
|
323
|
-
|
381
|
+
def visit_assignment_stmt(ctx)
|
382
|
+
ctx__general_ref = ctx.general_ref
|
383
|
+
ctx__qualifier = ctx.qualifier
|
384
|
+
ctx__expression = ctx.expression
|
385
|
+
|
386
|
+
ref = handle_qualified_ref(visit_if(ctx__general_ref), ctx__qualifier)
|
387
|
+
expression = visit_if(ctx__expression)
|
324
388
|
|
325
389
|
Model::Statements::Assignment.new({
|
326
390
|
ref: ref,
|
@@ -328,26 +392,50 @@ module Expressir
|
|
328
392
|
})
|
329
393
|
end
|
330
394
|
|
331
|
-
def
|
332
|
-
|
395
|
+
def visit_attribute_decl(ctx)
|
396
|
+
ctx__attribute_id = ctx.attribute_id
|
397
|
+
ctx__redeclared_attribute = ctx.redeclared_attribute
|
398
|
+
ctx__redeclared_attribute__qualified_attribute = ctx__redeclared_attribute&.qualified_attribute
|
399
|
+
ctx__redeclared_attribute__attribute_id = ctx__redeclared_attribute&.attribute_id
|
400
|
+
|
401
|
+
id = visit_if(ctx__attribute_id || ctx__redeclared_attribute__attribute_id)
|
402
|
+
supertype_attribute = visit_if(ctx__redeclared_attribute__qualified_attribute)
|
403
|
+
|
404
|
+
Model::Attribute.new({
|
405
|
+
id: id,
|
406
|
+
supertype_attribute: supertype_attribute
|
407
|
+
})
|
408
|
+
end
|
409
|
+
|
410
|
+
def visit_attribute_id(ctx)
|
411
|
+
ctx__SimpleId = ctx.SimpleId
|
412
|
+
|
413
|
+
handle_simple_id(ctx__SimpleId)
|
333
414
|
end
|
334
415
|
|
335
|
-
def
|
336
|
-
|
416
|
+
def visit_attribute_qualifier(ctx)
|
417
|
+
ctx__attribute_ref = ctx.attribute_ref
|
418
|
+
|
419
|
+
attribute = visit_if(ctx__attribute_ref)
|
420
|
+
|
421
|
+
Model::Expressions::AttributeReference.new({
|
422
|
+
attribute: attribute
|
423
|
+
})
|
337
424
|
end
|
338
425
|
|
339
|
-
def
|
426
|
+
def visit_attribute_reference(ctx)
|
340
427
|
raise 'Invalid state'
|
341
428
|
end
|
342
429
|
|
343
|
-
def
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
430
|
+
def visit_bag_type(ctx)
|
431
|
+
ctx__bound_spec = ctx.bound_spec
|
432
|
+
ctx__instantiable_type = ctx.instantiable_type
|
433
|
+
ctx__bound_spec__bound1 = ctx__bound_spec&.bound1
|
434
|
+
ctx__bound_spec__bound2 = ctx__bound_spec&.bound2
|
435
|
+
|
436
|
+
bound1 = visit_if(ctx__bound_spec__bound1)
|
437
|
+
bound2 = visit_if(ctx__bound_spec__bound2)
|
438
|
+
base_type = visit_if(ctx__instantiable_type)
|
351
439
|
|
352
440
|
Model::Types::Bag.new({
|
353
441
|
bound1: bound1,
|
@@ -356,13 +444,13 @@ module Expressir
|
|
356
444
|
})
|
357
445
|
end
|
358
446
|
|
359
|
-
def
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
447
|
+
def visit_binary_type(ctx)
|
448
|
+
ctx__width_spec = ctx.width_spec
|
449
|
+
ctx__width_spec__width = ctx__width_spec&.width
|
450
|
+
ctx__width_spec__FIXED = ctx__width_spec&.FIXED
|
451
|
+
|
452
|
+
width = visit_if(ctx__width_spec__width)
|
453
|
+
fixed = !!ctx__width_spec__FIXED
|
366
454
|
|
367
455
|
Model::Types::Binary.new({
|
368
456
|
width: width,
|
@@ -370,49 +458,62 @@ module Expressir
|
|
370
458
|
})
|
371
459
|
end
|
372
460
|
|
373
|
-
def
|
374
|
-
Model::Types::Boolean.new
|
461
|
+
def visit_boolean_type(ctx)
|
462
|
+
Model::Types::Boolean.new
|
375
463
|
end
|
376
464
|
|
377
|
-
def
|
378
|
-
|
465
|
+
def visit_bound1(ctx)
|
466
|
+
ctx__numeric_expression = ctx.numeric_expression
|
467
|
+
|
468
|
+
visit_if(ctx__numeric_expression)
|
379
469
|
end
|
380
470
|
|
381
|
-
def
|
382
|
-
|
471
|
+
def visit_bound2(ctx)
|
472
|
+
ctx__numeric_expression = ctx.numeric_expression
|
473
|
+
|
474
|
+
visit_if(ctx__numeric_expression)
|
383
475
|
end
|
384
476
|
|
385
|
-
def
|
477
|
+
def visit_bound_spec(ctx)
|
386
478
|
raise 'Invalid state'
|
387
479
|
end
|
388
480
|
|
389
|
-
def
|
390
|
-
|
481
|
+
def visit_built_in_constant(ctx)
|
482
|
+
ctx__text = ctx.text
|
483
|
+
|
484
|
+
id = ctx__text
|
391
485
|
|
392
486
|
Model::Expressions::SimpleReference.new({
|
393
487
|
id: id
|
394
488
|
})
|
395
489
|
end
|
396
490
|
|
397
|
-
def
|
398
|
-
|
491
|
+
def visit_built_in_function(ctx)
|
492
|
+
ctx__text = ctx.text
|
493
|
+
|
494
|
+
id = ctx__text
|
399
495
|
|
400
496
|
Model::Expressions::SimpleReference.new({
|
401
497
|
id: id
|
402
498
|
})
|
403
499
|
end
|
404
500
|
|
405
|
-
def
|
406
|
-
|
501
|
+
def visit_built_in_procedure(ctx)
|
502
|
+
ctx__text = ctx.text
|
503
|
+
|
504
|
+
id = ctx__text
|
407
505
|
|
408
506
|
Model::Expressions::SimpleReference.new({
|
409
507
|
id: id
|
410
508
|
})
|
411
509
|
end
|
412
510
|
|
413
|
-
def
|
414
|
-
|
415
|
-
|
511
|
+
def visit_case_action(ctx)
|
512
|
+
ctx__case_label = ctx.case_label
|
513
|
+
ctx__stmt = ctx.stmt
|
514
|
+
|
515
|
+
labels = visit_if_map(ctx__case_label)
|
516
|
+
statement = visit_if(ctx__stmt)
|
416
517
|
|
417
518
|
Model::Statements::CaseAction.new({
|
418
519
|
labels: labels,
|
@@ -420,16 +521,21 @@ module Expressir
|
|
420
521
|
})
|
421
522
|
end
|
422
523
|
|
423
|
-
def
|
424
|
-
|
524
|
+
def visit_case_label(ctx)
|
525
|
+
ctx__expression = ctx.expression
|
526
|
+
|
527
|
+
visit_if(ctx__expression)
|
425
528
|
end
|
426
529
|
|
427
|
-
def
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
530
|
+
def visit_case_stmt(ctx)
|
531
|
+
ctx__selector = ctx.selector
|
532
|
+
ctx__case_action = ctx.case_action
|
533
|
+
ctx__stmt = ctx.stmt
|
534
|
+
ctx__selector__expression = ctx__selector&.expression
|
535
|
+
|
536
|
+
expression = visit_if(ctx__selector__expression)
|
537
|
+
actions = visit_if_map_flatten(ctx__case_action)
|
538
|
+
otherwise_statement = visit_if(ctx__stmt)
|
433
539
|
|
434
540
|
Model::Statements::Case.new({
|
435
541
|
expression: expression,
|
@@ -438,30 +544,32 @@ module Expressir
|
|
438
544
|
})
|
439
545
|
end
|
440
546
|
|
441
|
-
def
|
442
|
-
|
547
|
+
def visit_compound_stmt(ctx)
|
548
|
+
ctx__stmt = ctx.stmt
|
549
|
+
|
550
|
+
statements = visit_if_map(ctx__stmt)
|
443
551
|
|
444
552
|
Model::Statements::Compound.new({
|
445
553
|
statements: statements
|
446
554
|
})
|
447
555
|
end
|
448
556
|
|
449
|
-
def
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
visit(ctx.typeRef())
|
456
|
-
else
|
457
|
-
raise 'Invalid state'
|
458
|
-
end
|
557
|
+
def visit_concrete_types(ctx)
|
558
|
+
ctx__aggregation_types = ctx.aggregation_types
|
559
|
+
ctx__simple_types = ctx.simple_types
|
560
|
+
ctx__type_ref = ctx.type_ref
|
561
|
+
|
562
|
+
visit_if(ctx__aggregation_types || ctx__simple_types || ctx__type_ref)
|
459
563
|
end
|
460
564
|
|
461
|
-
def
|
462
|
-
|
463
|
-
|
464
|
-
|
565
|
+
def visit_constant_body(ctx)
|
566
|
+
ctx__constant_id = ctx.constant_id
|
567
|
+
ctx__instantiable_type = ctx.instantiable_type
|
568
|
+
ctx__expression = ctx.expression
|
569
|
+
|
570
|
+
id = visit_if(ctx__constant_id)
|
571
|
+
type = visit_if(ctx__instantiable_type)
|
572
|
+
expression = visit_if(ctx__expression)
|
465
573
|
|
466
574
|
Model::Constant.new({
|
467
575
|
id: id,
|
@@ -470,80 +578,72 @@ module Expressir
|
|
470
578
|
})
|
471
579
|
end
|
472
580
|
|
473
|
-
def
|
474
|
-
|
581
|
+
def visit_constant_decl(ctx)
|
582
|
+
ctx__constant_body = ctx.constant_body
|
583
|
+
|
584
|
+
visit_if_map(ctx__constant_body)
|
475
585
|
end
|
476
586
|
|
477
|
-
def
|
478
|
-
|
479
|
-
|
480
|
-
|
481
|
-
|
482
|
-
else
|
483
|
-
raise 'Invalid state'
|
484
|
-
end
|
587
|
+
def visit_constant_factor(ctx)
|
588
|
+
ctx__built_in_constant = ctx.built_in_constant
|
589
|
+
ctx__constant_ref = ctx.constant_ref
|
590
|
+
|
591
|
+
visit_if(ctx__built_in_constant || ctx__constant_ref)
|
485
592
|
end
|
486
593
|
|
487
|
-
def
|
488
|
-
|
594
|
+
def visit_constant_id(ctx)
|
595
|
+
ctx__SimpleId = ctx.SimpleId
|
596
|
+
|
597
|
+
handle_simple_id(ctx__SimpleId)
|
489
598
|
end
|
490
599
|
|
491
|
-
def
|
492
|
-
|
493
|
-
|
494
|
-
|
495
|
-
|
496
|
-
else
|
497
|
-
raise 'Invalid state'
|
498
|
-
end
|
600
|
+
def visit_constructed_types(ctx)
|
601
|
+
ctx__enumeration_type = ctx.enumeration_type
|
602
|
+
ctx__select_type = ctx.select_type
|
603
|
+
|
604
|
+
visit_if(ctx__enumeration_type || ctx__select_type)
|
499
605
|
end
|
500
606
|
|
501
|
-
def
|
502
|
-
|
503
|
-
|
504
|
-
|
505
|
-
|
506
|
-
|
507
|
-
|
508
|
-
|
509
|
-
visit(ctx.subtypeConstraintDecl())
|
510
|
-
elsif ctx.typeDecl()
|
511
|
-
visit(ctx.typeDecl())
|
512
|
-
else
|
513
|
-
raise 'Invalid state'
|
514
|
-
end
|
607
|
+
def visit_declaration(ctx)
|
608
|
+
ctx__entity_decl = ctx.entity_decl
|
609
|
+
ctx__function_decl = ctx.function_decl
|
610
|
+
ctx__procedure_decl = ctx.procedure_decl
|
611
|
+
ctx__subtype_constraint_decl = ctx.subtype_constraint_decl
|
612
|
+
ctx__type_decl = ctx.type_decl
|
613
|
+
|
614
|
+
visit_if(ctx__entity_decl || ctx__function_decl || ctx__procedure_decl || ctx__subtype_constraint_decl || ctx__type_decl)
|
515
615
|
end
|
516
616
|
|
517
|
-
def
|
518
|
-
|
519
|
-
|
520
|
-
|
521
|
-
|
522
|
-
|
523
|
-
|
524
|
-
|
525
|
-
end
|
526
|
-
type = visit(ctx.parameterType())
|
527
|
-
expression = visit(ctx.expression())
|
617
|
+
def visit_derived_attr(ctx)
|
618
|
+
ctx__attribute_decl = ctx.attribute_decl
|
619
|
+
ctx__parameter_type = ctx.parameter_type
|
620
|
+
ctx__expression = ctx.expression
|
621
|
+
|
622
|
+
attribute = visit_if(ctx__attribute_decl)
|
623
|
+
type = visit_if(ctx__parameter_type)
|
624
|
+
expression = visit_if(ctx__expression)
|
528
625
|
|
529
626
|
Model::Attribute.new({
|
627
|
+
id: attribute.id,
|
530
628
|
kind: Model::Attribute::DERIVED,
|
531
|
-
supertype_attribute: supertype_attribute,
|
532
|
-
id: id,
|
629
|
+
supertype_attribute: attribute.supertype_attribute,
|
533
630
|
type: type,
|
534
631
|
expression: expression
|
535
632
|
})
|
536
633
|
end
|
537
634
|
|
538
|
-
def
|
539
|
-
|
635
|
+
def visit_derive_clause(ctx)
|
636
|
+
ctx__derived_attr = ctx.derived_attr
|
637
|
+
|
638
|
+
visit_if_map(ctx__derived_attr)
|
540
639
|
end
|
541
640
|
|
542
|
-
def
|
543
|
-
|
544
|
-
|
545
|
-
|
546
|
-
|
641
|
+
def visit_domain_rule(ctx)
|
642
|
+
ctx__rule_label_id = ctx.rule_label_id
|
643
|
+
ctx__expression = ctx.expression
|
644
|
+
|
645
|
+
id = visit_if(ctx__rule_label_id)
|
646
|
+
expression = visit_if(ctx__expression)
|
547
647
|
|
548
648
|
Model::Where.new({
|
549
649
|
id: id,
|
@@ -551,27 +651,33 @@ module Expressir
|
|
551
651
|
})
|
552
652
|
end
|
553
653
|
|
554
|
-
def
|
555
|
-
|
556
|
-
|
557
|
-
|
654
|
+
def visit_element(ctx)
|
655
|
+
ctx__expression = ctx.expression
|
656
|
+
ctx__repetition = ctx.repetition
|
657
|
+
|
658
|
+
if ctx__repetition
|
659
|
+
expression = visit_if(ctx__expression)
|
660
|
+
repetition = visit_if(ctx__repetition)
|
558
661
|
|
559
662
|
Model::Expressions::AggregateItem.new({
|
560
663
|
expression: expression,
|
561
664
|
repetition: repetition
|
562
665
|
})
|
563
666
|
else
|
564
|
-
|
667
|
+
visit_if(ctx__expression)
|
565
668
|
end
|
566
669
|
end
|
567
670
|
|
568
|
-
def
|
671
|
+
def visit_entity_body(ctx)
|
569
672
|
raise 'Invalid state'
|
570
673
|
end
|
571
674
|
|
572
|
-
def
|
573
|
-
|
574
|
-
|
675
|
+
def visit_entity_constructor(ctx)
|
676
|
+
ctx__entity_ref = ctx.entity_ref
|
677
|
+
ctx__expression = ctx.expression
|
678
|
+
|
679
|
+
ref = visit_if(ctx__entity_ref)
|
680
|
+
parameters = visit_if_map(ctx__expression)
|
575
681
|
|
576
682
|
Model::Expressions::Call.new({
|
577
683
|
ref: ref,
|
@@ -579,34 +685,33 @@ module Expressir
|
|
579
685
|
})
|
580
686
|
end
|
581
687
|
|
582
|
-
def
|
583
|
-
|
584
|
-
|
585
|
-
|
586
|
-
|
587
|
-
|
588
|
-
|
589
|
-
|
590
|
-
|
591
|
-
|
592
|
-
|
593
|
-
|
594
|
-
|
688
|
+
def visit_entity_decl(ctx)
|
689
|
+
ctx__entity_head = ctx.entity_head
|
690
|
+
ctx__entity_body = ctx.entity_body
|
691
|
+
ctx__entity_head__entity_id = ctx__entity_head&.entity_id
|
692
|
+
ctx__entity_head__subsuper = ctx__entity_head&.subsuper
|
693
|
+
ctx__entity_head__subsuper__supertype_constraint = ctx__entity_head__subsuper&.supertype_constraint
|
694
|
+
ctx__entity_head__subsuper__supertype_constraint__abstract_entity_declaration = ctx__entity_head__subsuper__supertype_constraint&.abstract_entity_declaration
|
695
|
+
ctx__entity_head__subsuper__supertype_constraint__abstract_supertype_declaration = ctx__entity_head__subsuper__supertype_constraint&.abstract_supertype_declaration
|
696
|
+
ctx__entity_head__subsuper__supertype_constraint__supertype_rule = ctx__entity_head__subsuper__supertype_constraint&.supertype_rule
|
697
|
+
ctx__entity_head__subsuper__subtype_declaration = ctx__entity_head__subsuper&.subtype_declaration
|
698
|
+
ctx__entity_body__explicit_attr = ctx__entity_body&.explicit_attr
|
699
|
+
ctx__entity_body__derive_clause = ctx__entity_body&.derive_clause
|
700
|
+
ctx__entity_body__inverse_clause = ctx__entity_body&.inverse_clause
|
701
|
+
ctx__entity_body__unique_clause = ctx__entity_body&.unique_clause
|
702
|
+
ctx__entity_body__where_clause = ctx__entity_body&.where_clause
|
703
|
+
|
704
|
+
id = visit_if(ctx__entity_head__entity_id)
|
705
|
+
abstract = !!(ctx__entity_head__subsuper__supertype_constraint__abstract_entity_declaration || ctx__entity_head__subsuper__supertype_constraint__abstract_supertype_declaration)
|
706
|
+
supertype_expression = visit_if(ctx__entity_head__subsuper__supertype_constraint__abstract_supertype_declaration || ctx__entity_head__subsuper__supertype_constraint__supertype_rule)
|
707
|
+
subtype_of = visit_if(ctx__entity_head__subsuper__subtype_declaration)
|
595
708
|
attributes = [
|
596
|
-
*
|
597
|
-
*
|
598
|
-
|
599
|
-
end,
|
600
|
-
*if ctx.entityBody().inverseClause()
|
601
|
-
ctx.entityBody().inverseClause().inverseAttr().map{|ctx| visit(ctx)}
|
602
|
-
end
|
709
|
+
*visit_if_map_flatten(ctx__entity_body__explicit_attr),
|
710
|
+
*visit_if(ctx__entity_body__derive_clause),
|
711
|
+
*visit_if(ctx__entity_body__inverse_clause)
|
603
712
|
]
|
604
|
-
unique =
|
605
|
-
|
606
|
-
end
|
607
|
-
where = if ctx.entityBody().whereClause()
|
608
|
-
ctx.entityBody().whereClause().domainRule().map{|ctx| visit(ctx)}
|
609
|
-
end
|
713
|
+
unique = visit_if(ctx__entity_body__unique_clause)
|
714
|
+
where = visit_if(ctx__entity_body__where_clause)
|
610
715
|
|
611
716
|
Model::Entity.new({
|
612
717
|
id: id,
|
@@ -619,51 +724,70 @@ module Expressir
|
|
619
724
|
})
|
620
725
|
end
|
621
726
|
|
622
|
-
def
|
727
|
+
def visit_entity_head(ctx)
|
623
728
|
raise 'Invalid state'
|
624
729
|
end
|
625
730
|
|
626
|
-
def
|
627
|
-
|
731
|
+
def visit_entity_id(ctx)
|
732
|
+
ctx__SimpleId = ctx.SimpleId
|
733
|
+
|
734
|
+
handle_simple_id(ctx__SimpleId)
|
628
735
|
end
|
629
736
|
|
630
|
-
def
|
737
|
+
def visit_enumeration_extension(ctx)
|
631
738
|
raise 'Invalid state'
|
632
739
|
end
|
633
740
|
|
634
|
-
def
|
635
|
-
|
741
|
+
def visit_enumeration_id(ctx)
|
742
|
+
ctx__SimpleId = ctx.SimpleId
|
743
|
+
|
744
|
+
handle_simple_id(ctx__SimpleId)
|
636
745
|
end
|
637
746
|
|
638
|
-
def
|
639
|
-
|
747
|
+
def visit_enumeration_items(ctx)
|
748
|
+
ctx__enumeration_item = ctx.enumeration_item
|
749
|
+
|
750
|
+
visit_if_map(ctx__enumeration_item)
|
640
751
|
end
|
641
752
|
|
642
|
-
def
|
643
|
-
|
644
|
-
|
645
|
-
|
753
|
+
def visit_enumeration_item(ctx)
|
754
|
+
ctx__enumeration_id = ctx.enumeration_id
|
755
|
+
|
756
|
+
id = visit_if(ctx__enumeration_id)
|
757
|
+
|
758
|
+
Model::EnumerationItem.new({
|
759
|
+
id: id
|
760
|
+
})
|
761
|
+
end
|
762
|
+
|
763
|
+
def visit_enumeration_reference(ctx)
|
764
|
+
ctx__type_ref = ctx.type_ref
|
765
|
+
ctx__enumeration_ref = ctx.enumeration_ref
|
766
|
+
|
767
|
+
if ctx__type_ref
|
768
|
+
ref = visit_if(ctx__type_ref)
|
769
|
+
attribute = visit_if(ctx__enumeration_ref)
|
646
770
|
|
647
771
|
Model::Expressions::AttributeReference.new({
|
648
772
|
ref: ref,
|
649
773
|
attribute: attribute
|
650
774
|
})
|
651
775
|
else
|
652
|
-
|
776
|
+
visit_if(ctx__enumeration_ref)
|
653
777
|
end
|
654
778
|
end
|
655
779
|
|
656
|
-
def
|
657
|
-
|
658
|
-
|
659
|
-
|
660
|
-
|
661
|
-
|
662
|
-
|
663
|
-
|
664
|
-
|
665
|
-
|
666
|
-
|
780
|
+
def visit_enumeration_type(ctx)
|
781
|
+
ctx__EXTENSIBLE = ctx.EXTENSIBLE
|
782
|
+
ctx__enumeration_items = ctx.enumeration_items
|
783
|
+
ctx__enumeration_extension = ctx.enumeration_extension
|
784
|
+
ctx__enumeration_extension__type_ref = ctx__enumeration_extension&.type_ref
|
785
|
+
ctx__enumeration_extension__enumeration_items = ctx__enumeration_extension&.enumeration_items
|
786
|
+
|
787
|
+
extensible = !!ctx__EXTENSIBLE
|
788
|
+
items = visit_if(ctx__enumeration_items)
|
789
|
+
extension_type = visit_if(ctx__enumeration_extension__type_ref)
|
790
|
+
extension_items = visit_if(ctx__enumeration_extension__enumeration_items)
|
667
791
|
|
668
792
|
Model::Types::Enumeration.new({
|
669
793
|
extensible: extensible,
|
@@ -673,40 +797,38 @@ module Expressir
|
|
673
797
|
})
|
674
798
|
end
|
675
799
|
|
676
|
-
def
|
677
|
-
Model::Statements::Escape.new
|
800
|
+
def visit_escape_stmt(ctx)
|
801
|
+
Model::Statements::Escape.new
|
678
802
|
end
|
679
803
|
|
680
|
-
def
|
681
|
-
|
682
|
-
|
683
|
-
|
804
|
+
def visit_explicit_attr(ctx)
|
805
|
+
ctx__attribute_decl = ctx.attribute_decl
|
806
|
+
ctx__OPTIONAL = ctx.OPTIONAL
|
807
|
+
ctx__parameter_type = ctx.parameter_type
|
684
808
|
|
685
|
-
|
686
|
-
|
687
|
-
|
688
|
-
end
|
689
|
-
id = if decl.attributeId()
|
690
|
-
visit(decl.attributeId())
|
691
|
-
elsif decl.redeclaredAttribute() && decl.redeclaredAttribute().attributeId()
|
692
|
-
visit(decl.redeclaredAttribute().attributeId())
|
693
|
-
end
|
809
|
+
attributes = visit_if_map(ctx__attribute_decl)
|
810
|
+
optional = !!ctx__OPTIONAL
|
811
|
+
type = visit_if(ctx__parameter_type)
|
694
812
|
|
813
|
+
attributes.map do |attribute|
|
695
814
|
Model::Attribute.new({
|
815
|
+
id: attribute.id,
|
696
816
|
kind: Model::Attribute::EXPLICIT,
|
697
|
-
supertype_attribute: supertype_attribute,
|
698
|
-
id: id,
|
817
|
+
supertype_attribute: attribute.supertype_attribute,
|
699
818
|
optional: optional,
|
700
819
|
type: type
|
701
820
|
})
|
702
821
|
end
|
703
822
|
end
|
704
823
|
|
705
|
-
def
|
706
|
-
|
707
|
-
|
708
|
-
|
709
|
-
|
824
|
+
def visit_expression(ctx)
|
825
|
+
ctx__simple_expression = ctx.simple_expression
|
826
|
+
ctx__rel_op_extended = ctx.rel_op_extended
|
827
|
+
|
828
|
+
if ctx__simple_expression.length == 2
|
829
|
+
operator = visit_if(ctx__rel_op_extended)
|
830
|
+
operand1 = visit_if(ctx__simple_expression[0])
|
831
|
+
operand2 = visit_if(ctx__simple_expression[1])
|
710
832
|
|
711
833
|
Model::Expressions::BinaryExpression.new({
|
712
834
|
operator: operator,
|
@@ -714,29 +836,36 @@ module Expressir
|
|
714
836
|
operand2: operand2
|
715
837
|
})
|
716
838
|
else
|
717
|
-
|
839
|
+
visit_if(ctx__simple_expression[0])
|
718
840
|
end
|
719
841
|
end
|
720
842
|
|
721
|
-
def
|
722
|
-
|
843
|
+
def visit_factor(ctx)
|
844
|
+
ctx__simple_factor = ctx.simple_factor
|
845
|
+
|
846
|
+
if ctx__simple_factor.length == 2
|
723
847
|
operator = Model::Expressions::BinaryExpression::EXPONENTIATION
|
724
|
-
operand1 = visit(
|
725
|
-
operand2 = visit(
|
848
|
+
operand1 = visit(ctx__simple_factor[0])
|
849
|
+
operand2 = visit(ctx__simple_factor[1])
|
726
850
|
|
727
851
|
Model::Expressions::BinaryExpression.new({
|
728
852
|
operator: operator,
|
729
853
|
operand1: operand1,
|
730
854
|
operand2: operand2
|
731
855
|
})
|
856
|
+
elsif ctx__simple_factor.length == 1
|
857
|
+
visit_if(ctx__simple_factor[0])
|
732
858
|
else
|
733
|
-
|
859
|
+
raise 'Invalid state'
|
734
860
|
end
|
735
861
|
end
|
736
862
|
|
737
|
-
def
|
738
|
-
|
739
|
-
|
863
|
+
def visit_formal_parameter(ctx)
|
864
|
+
ctx__parameter_id = ctx.parameter_id
|
865
|
+
ctx__parameter_type = ctx.parameter_type
|
866
|
+
|
867
|
+
ids = visit_if_map(ctx__parameter_id)
|
868
|
+
type = visit_if(ctx__parameter_type)
|
740
869
|
|
741
870
|
ids.map do |id|
|
742
871
|
Model::Parameter.new({
|
@@ -746,17 +875,13 @@ module Expressir
|
|
746
875
|
end
|
747
876
|
end
|
748
877
|
|
749
|
-
def
|
750
|
-
|
751
|
-
|
752
|
-
|
753
|
-
|
754
|
-
|
755
|
-
|
756
|
-
end
|
757
|
-
parameters = if ctx.actualParameterList()
|
758
|
-
ctx.actualParameterList().parameter().map{|ctx| visit(ctx.expression)}
|
759
|
-
end
|
878
|
+
def visit_function_call(ctx)
|
879
|
+
ctx__built_in_function = ctx.built_in_function
|
880
|
+
ctx__function_ref = ctx.function_ref
|
881
|
+
ctx__actual_parameter_list = ctx.actual_parameter_list
|
882
|
+
|
883
|
+
ref = visit_if(ctx__built_in_function || ctx__function_ref)
|
884
|
+
parameters = visit_if(ctx__actual_parameter_list)
|
760
885
|
|
761
886
|
Model::Expressions::Call.new({
|
762
887
|
ref: ref,
|
@@ -764,19 +889,24 @@ module Expressir
|
|
764
889
|
})
|
765
890
|
end
|
766
891
|
|
767
|
-
def
|
768
|
-
|
769
|
-
|
770
|
-
|
771
|
-
|
772
|
-
|
773
|
-
|
774
|
-
|
775
|
-
|
776
|
-
|
777
|
-
|
778
|
-
|
779
|
-
|
892
|
+
def visit_function_decl(ctx)
|
893
|
+
ctx__function_head = ctx.function_head
|
894
|
+
ctx__algorithm_head = ctx.algorithm_head
|
895
|
+
ctx__stmt = ctx.stmt
|
896
|
+
ctx__function_head__function_id = ctx__function_head&.function_id
|
897
|
+
ctx__function_head__formal_parameter = ctx__function_head&.formal_parameter
|
898
|
+
ctx__function_head__parameter_type = ctx__function_head&.parameter_type
|
899
|
+
ctx__algorithm_head__declaration = ctx__algorithm_head&.declaration
|
900
|
+
ctx__algorithm_head__constant_decl = ctx__algorithm_head&.constant_decl
|
901
|
+
ctx__algorithm_head__local_decl = ctx__algorithm_head&.local_decl
|
902
|
+
|
903
|
+
id = visit_if(ctx__function_head__function_id)
|
904
|
+
parameters = visit_if_map_flatten(ctx__function_head__formal_parameter)
|
905
|
+
return_type = visit_if(ctx__function_head__parameter_type)
|
906
|
+
declarations = visit_if_map(ctx__algorithm_head__declaration)
|
907
|
+
constants = visit_if(ctx__algorithm_head__constant_decl)
|
908
|
+
variables = visit_if(ctx__algorithm_head__local_decl)
|
909
|
+
statements = visit_if_map(ctx__stmt)
|
780
910
|
|
781
911
|
Model::Function.new({
|
782
912
|
id: id,
|
@@ -789,52 +919,47 @@ module Expressir
|
|
789
919
|
})
|
790
920
|
end
|
791
921
|
|
792
|
-
def
|
922
|
+
def visit_function_head(ctx)
|
793
923
|
raise 'Invalid state'
|
794
924
|
end
|
795
925
|
|
796
|
-
def
|
797
|
-
|
926
|
+
def visit_function_id(ctx)
|
927
|
+
ctx__SimpleId = ctx.SimpleId
|
928
|
+
|
929
|
+
handle_simple_id(ctx__SimpleId)
|
798
930
|
end
|
799
931
|
|
800
|
-
def
|
801
|
-
|
802
|
-
|
803
|
-
|
804
|
-
|
805
|
-
|
806
|
-
|
807
|
-
elsif ctx.genericType()
|
808
|
-
visit(ctx.genericType())
|
809
|
-
else
|
810
|
-
raise 'Invalid state'
|
811
|
-
end
|
932
|
+
def visit_generalized_types(ctx)
|
933
|
+
ctx__aggregate_type = ctx.aggregate_type
|
934
|
+
ctx__general_aggregation_types = ctx.general_aggregation_types
|
935
|
+
ctx__generic_entity_type = ctx.generic_entity_type
|
936
|
+
ctx__generic_type = ctx.generic_type
|
937
|
+
|
938
|
+
visit_if(ctx__aggregate_type || ctx__general_aggregation_types || ctx__generic_entity_type || ctx__generic_type)
|
812
939
|
end
|
813
940
|
|
814
|
-
def
|
815
|
-
|
816
|
-
|
817
|
-
|
818
|
-
|
819
|
-
|
820
|
-
|
821
|
-
elsif ctx.generalSetType()
|
822
|
-
visit(ctx.generalSetType())
|
823
|
-
else
|
824
|
-
raise 'Invalid state'
|
825
|
-
end
|
941
|
+
def visit_general_aggregation_types(ctx)
|
942
|
+
ctx__general_array_type = ctx.general_array_type
|
943
|
+
ctx__general_bag_type = ctx.general_bag_type
|
944
|
+
ctx__general_list_type = ctx.general_list_type
|
945
|
+
ctx__general_set_type = ctx.general_set_type
|
946
|
+
|
947
|
+
visit_if(ctx__general_array_type || ctx__general_bag_type || ctx__general_list_type || ctx__general_set_type)
|
826
948
|
end
|
827
949
|
|
828
|
-
def
|
829
|
-
|
830
|
-
|
831
|
-
|
832
|
-
|
833
|
-
|
834
|
-
|
835
|
-
|
836
|
-
|
837
|
-
|
950
|
+
def visit_general_array_type(ctx)
|
951
|
+
ctx__bound_spec = ctx.bound_spec
|
952
|
+
ctx__OPTIONAL = ctx.OPTIONAL
|
953
|
+
ctx__UNIQUE = ctx.UNIQUE
|
954
|
+
ctx__parameter_type = ctx.parameter_type
|
955
|
+
ctx__bound_spec__bound1 = ctx__bound_spec&.bound1
|
956
|
+
ctx__bound_spec__bound2 = ctx__bound_spec&.bound2
|
957
|
+
|
958
|
+
bound1 = visit_if(ctx__bound_spec__bound1)
|
959
|
+
bound2 = visit_if(ctx__bound_spec__bound2)
|
960
|
+
optional = !!ctx__OPTIONAL
|
961
|
+
unique = !!ctx__UNIQUE
|
962
|
+
base_type = visit_if(ctx__parameter_type)
|
838
963
|
|
839
964
|
Model::Types::Array.new({
|
840
965
|
bound1: bound1,
|
@@ -845,14 +970,15 @@ module Expressir
|
|
845
970
|
})
|
846
971
|
end
|
847
972
|
|
848
|
-
def
|
849
|
-
|
850
|
-
|
851
|
-
|
852
|
-
|
853
|
-
|
854
|
-
|
855
|
-
|
973
|
+
def visit_general_bag_type(ctx)
|
974
|
+
ctx__bound_spec = ctx.bound_spec
|
975
|
+
ctx__parameter_type = ctx.parameter_type
|
976
|
+
ctx__bound_spec__bound1 = ctx__bound_spec&.bound1
|
977
|
+
ctx__bound_spec__bound2 = ctx__bound_spec&.bound2
|
978
|
+
|
979
|
+
bound1 = visit_if(ctx__bound_spec__bound1)
|
980
|
+
bound2 = visit_if(ctx__bound_spec__bound2)
|
981
|
+
base_type = visit_if(ctx__parameter_type)
|
856
982
|
|
857
983
|
Model::Types::Bag.new({
|
858
984
|
bound1: bound1,
|
@@ -861,15 +987,17 @@ module Expressir
|
|
861
987
|
})
|
862
988
|
end
|
863
989
|
|
864
|
-
def
|
865
|
-
|
866
|
-
|
867
|
-
|
868
|
-
|
869
|
-
|
870
|
-
|
871
|
-
|
872
|
-
|
990
|
+
def visit_general_list_type(ctx)
|
991
|
+
ctx__bound_spec = ctx.bound_spec
|
992
|
+
ctx__UNIQUE = ctx.UNIQUE
|
993
|
+
ctx__parameter_type = ctx.parameter_type
|
994
|
+
ctx__bound_spec__bound1 = ctx__bound_spec&.bound1
|
995
|
+
ctx__bound_spec__bound2 = ctx__bound_spec&.bound2
|
996
|
+
|
997
|
+
bound1 = visit_if(ctx__bound_spec__bound1)
|
998
|
+
bound2 = visit_if(ctx__bound_spec__bound2)
|
999
|
+
unique = !!ctx__UNIQUE
|
1000
|
+
base_type = visit_if(ctx__parameter_type)
|
873
1001
|
|
874
1002
|
Model::Types::List.new({
|
875
1003
|
bound1: bound1,
|
@@ -879,24 +1007,22 @@ module Expressir
|
|
879
1007
|
})
|
880
1008
|
end
|
881
1009
|
|
882
|
-
def
|
883
|
-
|
884
|
-
|
885
|
-
|
886
|
-
|
887
|
-
else
|
888
|
-
raise 'Invalid state'
|
889
|
-
end
|
1010
|
+
def visit_general_ref(ctx)
|
1011
|
+
ctx__parameter_ref = ctx.parameter_ref
|
1012
|
+
ctx__variable_id = ctx.variable_id
|
1013
|
+
|
1014
|
+
visit_if(ctx__parameter_ref || ctx__variable_id)
|
890
1015
|
end
|
891
1016
|
|
892
|
-
def
|
893
|
-
|
894
|
-
|
895
|
-
|
896
|
-
|
897
|
-
|
898
|
-
|
899
|
-
|
1017
|
+
def visit_general_set_type(ctx)
|
1018
|
+
ctx__bound_spec = ctx.bound_spec
|
1019
|
+
ctx__parameter_type = ctx.parameter_type
|
1020
|
+
ctx__bound_spec__bound1 = ctx__bound_spec&.bound1
|
1021
|
+
ctx__bound_spec__bound2 = ctx__bound_spec&.bound2
|
1022
|
+
|
1023
|
+
bound1 = visit_if(ctx__bound_spec__bound1)
|
1024
|
+
bound2 = visit_if(ctx__bound_spec__bound2)
|
1025
|
+
base_type = visit_if(ctx__parameter_type)
|
900
1026
|
|
901
1027
|
Model::Types::Set.new({
|
902
1028
|
bound1: bound1,
|
@@ -905,46 +1031,48 @@ module Expressir
|
|
905
1031
|
})
|
906
1032
|
end
|
907
1033
|
|
908
|
-
def
|
909
|
-
|
910
|
-
|
911
|
-
|
1034
|
+
def visit_generic_entity_type(ctx)
|
1035
|
+
ctx__type_label = ctx.type_label
|
1036
|
+
|
1037
|
+
id = visit_if(ctx__type_label)
|
912
1038
|
|
913
1039
|
Model::Types::GenericEntity.new({
|
914
|
-
|
1040
|
+
id: id
|
915
1041
|
})
|
916
1042
|
end
|
917
1043
|
|
918
|
-
def
|
919
|
-
|
920
|
-
|
921
|
-
|
1044
|
+
def visit_generic_type(ctx)
|
1045
|
+
ctx__type_label = ctx.type_label
|
1046
|
+
|
1047
|
+
id = visit_if(ctx__type_label)
|
922
1048
|
|
923
1049
|
Model::Types::Generic.new({
|
924
|
-
|
1050
|
+
id: id
|
1051
|
+
})
|
1052
|
+
end
|
1053
|
+
|
1054
|
+
def visit_group_qualifier(ctx)
|
1055
|
+
ctx__entity_ref = ctx.entity_ref
|
1056
|
+
|
1057
|
+
entity = visit_if(ctx__entity_ref)
|
1058
|
+
|
1059
|
+
Model::Expressions::GroupReference.new({
|
1060
|
+
entity: entity
|
925
1061
|
})
|
926
1062
|
end
|
927
1063
|
|
928
|
-
def
|
1064
|
+
def visit_group_reference(ctx)
|
929
1065
|
raise 'Invalid state'
|
930
1066
|
end
|
931
1067
|
|
932
|
-
def
|
933
|
-
|
934
|
-
|
935
|
-
|
936
|
-
|
937
|
-
|
938
|
-
|
939
|
-
|
940
|
-
statements = if else_statement_index
|
941
|
-
ctx.stmt()[0..(else_statement_index - 1)].map{|ctx| visit(ctx)}
|
942
|
-
else
|
943
|
-
ctx.stmt().map{|ctx| visit(ctx)}
|
944
|
-
end
|
945
|
-
else_statements = if else_statement_index
|
946
|
-
ctx.stmt()[else_statement_index..(ctx.stmt().length - 1)].map{|ctx| visit(ctx)}
|
947
|
-
end
|
1068
|
+
def visit_if_stmt(ctx)
|
1069
|
+
ctx__logical_expression = ctx.logical_expression
|
1070
|
+
ctx__if_stmt_statements = ctx.if_stmt_statements
|
1071
|
+
ctx__if_stmt_else_statements = ctx.if_stmt_else_statements
|
1072
|
+
|
1073
|
+
expression = visit_if(ctx__logical_expression)
|
1074
|
+
statements = visit_if(ctx__if_stmt_statements)
|
1075
|
+
else_statements = visit_if(ctx__if_stmt_else_statements)
|
948
1076
|
|
949
1077
|
Model::Statements::If.new({
|
950
1078
|
expression: expression,
|
@@ -953,60 +1081,92 @@ module Expressir
|
|
953
1081
|
})
|
954
1082
|
end
|
955
1083
|
|
956
|
-
def
|
957
|
-
|
1084
|
+
def visit_if_stmt_statements(ctx)
|
1085
|
+
ctx__stmt = ctx.stmt
|
1086
|
+
|
1087
|
+
visit_if_map(ctx__stmt)
|
958
1088
|
end
|
959
1089
|
|
960
|
-
def
|
961
|
-
|
1090
|
+
def visit_if_stmt_else_statements(ctx)
|
1091
|
+
ctx__stmt = ctx.stmt
|
1092
|
+
|
1093
|
+
visit_if_map(ctx__stmt)
|
962
1094
|
end
|
963
1095
|
|
964
|
-
def
|
965
|
-
|
1096
|
+
def visit_increment(ctx)
|
1097
|
+
ctx__numeric_expression = ctx.numeric_expression
|
1098
|
+
|
1099
|
+
visit_if(ctx__numeric_expression)
|
966
1100
|
end
|
967
1101
|
|
968
|
-
def
|
1102
|
+
def visit_increment_control(ctx)
|
969
1103
|
raise 'Invalid state'
|
970
1104
|
end
|
971
1105
|
|
972
|
-
def
|
973
|
-
|
1106
|
+
def visit_index(ctx)
|
1107
|
+
ctx__numeric_expression = ctx.numeric_expression
|
1108
|
+
|
1109
|
+
visit_if(ctx__numeric_expression)
|
1110
|
+
end
|
1111
|
+
|
1112
|
+
def visit_index1(ctx)
|
1113
|
+
ctx__index = ctx.index
|
1114
|
+
|
1115
|
+
visit_if(ctx__index)
|
1116
|
+
end
|
1117
|
+
|
1118
|
+
def visit_index2(ctx)
|
1119
|
+
ctx__index = ctx.index
|
1120
|
+
|
1121
|
+
visit_if(ctx__index)
|
1122
|
+
end
|
1123
|
+
|
1124
|
+
def visit_index_qualifier(ctx)
|
1125
|
+
ctx__index1 = ctx.index1
|
1126
|
+
ctx__index2 = ctx.index2
|
1127
|
+
|
1128
|
+
index1 = visit_if(ctx__index1)
|
1129
|
+
index2 = visit_if(ctx__index2)
|
1130
|
+
|
1131
|
+
Model::Expressions::IndexReference.new({
|
1132
|
+
index1: index1,
|
1133
|
+
index2: index2
|
1134
|
+
})
|
974
1135
|
end
|
975
1136
|
|
976
|
-
def
|
1137
|
+
def visit_index_reference(ctx)
|
977
1138
|
raise 'Invalid state'
|
978
1139
|
end
|
979
1140
|
|
980
|
-
def
|
981
|
-
|
982
|
-
|
983
|
-
|
984
|
-
|
985
|
-
else
|
986
|
-
raise 'Invalid state'
|
987
|
-
end
|
1141
|
+
def visit_instantiable_type(ctx)
|
1142
|
+
ctx__concrete_types = ctx.concrete_types
|
1143
|
+
ctx__entity_ref = ctx.entity_ref
|
1144
|
+
|
1145
|
+
visit_if(ctx__concrete_types || ctx__entity_ref)
|
988
1146
|
end
|
989
1147
|
|
990
|
-
def
|
991
|
-
Model::Types::Integer.new
|
1148
|
+
def visit_integer_type(ctx)
|
1149
|
+
Model::Types::Integer.new
|
992
1150
|
end
|
993
1151
|
|
994
|
-
def
|
995
|
-
|
996
|
-
|
997
|
-
|
998
|
-
|
999
|
-
else
|
1000
|
-
raise 'Invalid state'
|
1001
|
-
end
|
1152
|
+
def visit_interface_specification(ctx)
|
1153
|
+
ctx__reference_clause = ctx.reference_clause
|
1154
|
+
ctx__use_clause = ctx.use_clause
|
1155
|
+
|
1156
|
+
visit_if(ctx__reference_clause || ctx__use_clause)
|
1002
1157
|
end
|
1003
1158
|
|
1004
|
-
def
|
1005
|
-
|
1006
|
-
|
1007
|
-
|
1008
|
-
|
1009
|
-
|
1159
|
+
def visit_interval(ctx)
|
1160
|
+
ctx__interval_low = ctx.interval_low
|
1161
|
+
ctx__interval_op = ctx.interval_op
|
1162
|
+
ctx__interval_item = ctx.interval_item
|
1163
|
+
ctx__interval_high = ctx.interval_high
|
1164
|
+
|
1165
|
+
low = visit_if(ctx__interval_low)
|
1166
|
+
operator1 = visit_if(ctx__interval_op[0])
|
1167
|
+
item = visit_if(ctx__interval_item)
|
1168
|
+
operator2 = visit_if(ctx__interval_op[1])
|
1169
|
+
high = visit_if(ctx__interval_high)
|
1010
1170
|
|
1011
1171
|
Model::Expressions::Interval.new({
|
1012
1172
|
low: low,
|
@@ -1017,59 +1177,89 @@ module Expressir
|
|
1017
1177
|
})
|
1018
1178
|
end
|
1019
1179
|
|
1020
|
-
def
|
1021
|
-
|
1180
|
+
def visit_interval_high(ctx)
|
1181
|
+
ctx__simple_expression = ctx.simple_expression
|
1182
|
+
|
1183
|
+
visit_if(ctx__simple_expression)
|
1022
1184
|
end
|
1023
1185
|
|
1024
|
-
def
|
1025
|
-
|
1186
|
+
def visit_interval_item(ctx)
|
1187
|
+
ctx__simple_expression = ctx.simple_expression
|
1188
|
+
|
1189
|
+
visit_if(ctx__simple_expression)
|
1026
1190
|
end
|
1027
1191
|
|
1028
|
-
def
|
1029
|
-
|
1192
|
+
def visit_interval_low(ctx)
|
1193
|
+
ctx__simple_expression = ctx.simple_expression
|
1194
|
+
|
1195
|
+
visit_if(ctx__simple_expression)
|
1030
1196
|
end
|
1031
1197
|
|
1032
|
-
def
|
1033
|
-
|
1198
|
+
def visit_interval_op(ctx)
|
1199
|
+
ctx__text = ctx.text
|
1200
|
+
ctx__LESS_THAN = ctx__text == '<'
|
1201
|
+
ctx__LESS_THAN_OR_EQUAL = ctx__text == '<='
|
1202
|
+
|
1203
|
+
if ctx__LESS_THAN
|
1034
1204
|
Model::Expressions::BinaryExpression::LESS_THAN
|
1035
|
-
elsif
|
1205
|
+
elsif ctx__LESS_THAN_OR_EQUAL
|
1036
1206
|
Model::Expressions::BinaryExpression::LESS_THAN_OR_EQUAL
|
1037
1207
|
else
|
1038
1208
|
raise 'Invalid state'
|
1039
1209
|
end
|
1040
1210
|
end
|
1041
1211
|
|
1042
|
-
def
|
1043
|
-
|
1044
|
-
|
1045
|
-
|
1046
|
-
|
1047
|
-
|
1048
|
-
|
1049
|
-
|
1212
|
+
def visit_inverse_attr(ctx)
|
1213
|
+
ctx__attribute_decl = ctx.attribute_decl
|
1214
|
+
ctx__inverse_attr_type = ctx.inverse_attr_type
|
1215
|
+
ctx__entity_ref = ctx.entity_ref
|
1216
|
+
ctx__attribute_ref = ctx.attribute_ref
|
1217
|
+
|
1218
|
+
attribute = visit_if(ctx__attribute_decl)
|
1219
|
+
type = visit_if(ctx__inverse_attr_type)
|
1220
|
+
expression = if ctx__entity_ref
|
1221
|
+
ref = visit(ctx__entity_ref)
|
1222
|
+
attribute_ref = visit(ctx__attribute_ref)
|
1223
|
+
|
1224
|
+
Model::Expressions::AttributeReference.new({
|
1225
|
+
ref: ref,
|
1226
|
+
attribute: attribute_ref
|
1227
|
+
})
|
1228
|
+
else
|
1229
|
+
visit(ctx__attribute_ref)
|
1050
1230
|
end
|
1051
|
-
|
1052
|
-
|
1053
|
-
|
1054
|
-
|
1055
|
-
|
1056
|
-
|
1057
|
-
|
1058
|
-
|
1231
|
+
|
1232
|
+
Model::Attribute.new({
|
1233
|
+
id: attribute.id,
|
1234
|
+
kind: Model::Attribute::INVERSE,
|
1235
|
+
supertype_attribute: attribute.supertype_attribute,
|
1236
|
+
type: type,
|
1237
|
+
expression: expression
|
1238
|
+
})
|
1239
|
+
end
|
1240
|
+
|
1241
|
+
def visit_inverse_attr_type(ctx)
|
1242
|
+
ctx__SET = ctx.SET
|
1243
|
+
ctx__BAG = ctx.BAG
|
1244
|
+
ctx__bound_spec = ctx.bound_spec
|
1245
|
+
ctx__entity_ref = ctx.entity_ref
|
1246
|
+
ctx__bound_spec__bound1 = ctx__bound_spec&.bound1
|
1247
|
+
ctx__bound_spec__bound2 = ctx__bound_spec&.bound2
|
1248
|
+
|
1249
|
+
if ctx__SET
|
1250
|
+
bound1 = visit_if(ctx__bound_spec__bound1)
|
1251
|
+
bound2 = visit_if(ctx__bound_spec__bound2)
|
1252
|
+
base_type = visit_if(ctx__entity_ref)
|
1059
1253
|
|
1060
1254
|
Model::Types::Set.new({
|
1061
1255
|
bound1: bound1,
|
1062
1256
|
bound2: bound2,
|
1063
1257
|
base_type: base_type
|
1064
1258
|
})
|
1065
|
-
elsif
|
1066
|
-
bound1 =
|
1067
|
-
|
1068
|
-
|
1069
|
-
bound2 = if ctx.boundSpec()
|
1070
|
-
visit(ctx.boundSpec().bound2().numericExpression().simpleExpression())
|
1071
|
-
end
|
1072
|
-
base_type = visit(ctx.entityRef()[0])
|
1259
|
+
elsif ctx__BAG
|
1260
|
+
bound1 = visit_if(ctx__bound_spec__bound1)
|
1261
|
+
bound2 = visit_if(ctx__bound_spec__bound2)
|
1262
|
+
base_type = visit_if(ctx__entity_ref)
|
1073
1263
|
|
1074
1264
|
Model::Types::Bag.new({
|
1075
1265
|
bound1: bound1,
|
@@ -1077,42 +1267,27 @@ module Expressir
|
|
1077
1267
|
base_type: base_type
|
1078
1268
|
})
|
1079
1269
|
else
|
1080
|
-
|
1270
|
+
visit_if(ctx__entity_ref)
|
1081
1271
|
end
|
1082
|
-
|
1083
|
-
ref = visit(ctx.entityRef()[1])
|
1084
|
-
attribute = visit(ctx.attributeRef())
|
1272
|
+
end
|
1085
1273
|
|
1086
|
-
|
1087
|
-
|
1088
|
-
attribute: attribute
|
1089
|
-
})
|
1090
|
-
else
|
1091
|
-
visit(ctx.attributeRef())
|
1092
|
-
end
|
1274
|
+
def visit_inverse_clause(ctx)
|
1275
|
+
ctx__inverse_attr = ctx.inverse_attr
|
1093
1276
|
|
1094
|
-
|
1095
|
-
kind: Model::Attribute::INVERSE,
|
1096
|
-
supertype_attribute: supertype_attribute,
|
1097
|
-
id: id,
|
1098
|
-
type: type,
|
1099
|
-
expression: expression
|
1100
|
-
})
|
1277
|
+
visit_if_map(ctx__inverse_attr)
|
1101
1278
|
end
|
1102
1279
|
|
1103
|
-
def
|
1104
|
-
|
1105
|
-
|
1280
|
+
def visit_list_type(ctx)
|
1281
|
+
ctx__bound_spec = ctx.bound_spec
|
1282
|
+
ctx__UNIQUE = ctx.UNIQUE
|
1283
|
+
ctx__instantiable_type = ctx.instantiable_type
|
1284
|
+
ctx__bound_spec__bound1 = ctx__bound_spec&.bound1
|
1285
|
+
ctx__bound_spec__bound2 = ctx__bound_spec&.bound2
|
1106
1286
|
|
1107
|
-
|
1108
|
-
|
1109
|
-
|
1110
|
-
|
1111
|
-
bound2 = if ctx.boundSpec()
|
1112
|
-
visit(ctx.boundSpec().bound2().numericExpression().simpleExpression())
|
1113
|
-
end
|
1114
|
-
unique = !!ctx.UNIQUE()
|
1115
|
-
base_type = visit(ctx.instantiableType())
|
1287
|
+
bound1 = visit_if(ctx__bound_spec__bound1)
|
1288
|
+
bound2 = visit_if(ctx__bound_spec__bound2)
|
1289
|
+
unique = !!ctx__UNIQUE
|
1290
|
+
base_type = visit_if(ctx__instantiable_type)
|
1116
1291
|
|
1117
1292
|
Model::Types::List.new({
|
1118
1293
|
bound1: bound1,
|
@@ -1122,32 +1297,42 @@ module Expressir
|
|
1122
1297
|
})
|
1123
1298
|
end
|
1124
1299
|
|
1125
|
-
def
|
1126
|
-
|
1127
|
-
|
1128
|
-
|
1129
|
-
|
1130
|
-
|
1131
|
-
|
1132
|
-
|
1133
|
-
|
1134
|
-
elsif
|
1135
|
-
|
1300
|
+
def visit_literal(ctx)
|
1301
|
+
ctx__BinaryLiteral = ctx.BinaryLiteral
|
1302
|
+
ctx__IntegerLiteral = ctx.IntegerLiteral
|
1303
|
+
ctx__logical_literal = ctx.logical_literal
|
1304
|
+
ctx__RealLiteral = ctx.RealLiteral
|
1305
|
+
ctx__string_literal = ctx.string_literal
|
1306
|
+
|
1307
|
+
if ctx__BinaryLiteral
|
1308
|
+
handle_binary_literal(ctx__BinaryLiteral)
|
1309
|
+
elsif ctx__IntegerLiteral
|
1310
|
+
handle_integer_literal(ctx__IntegerLiteral)
|
1311
|
+
elsif ctx__logical_literal
|
1312
|
+
visit(ctx__logical_literal)
|
1313
|
+
elsif ctx__RealLiteral
|
1314
|
+
handle_real_literal(ctx__RealLiteral)
|
1315
|
+
elsif ctx__string_literal
|
1316
|
+
visit(ctx__string_literal)
|
1136
1317
|
else
|
1137
1318
|
raise 'Invalid state'
|
1138
1319
|
end
|
1139
1320
|
end
|
1140
1321
|
|
1141
|
-
def
|
1142
|
-
|
1322
|
+
def visit_local_decl(ctx)
|
1323
|
+
ctx__local_variable = ctx.local_variable
|
1324
|
+
|
1325
|
+
visit_if_map_flatten(ctx__local_variable)
|
1143
1326
|
end
|
1144
1327
|
|
1145
|
-
def
|
1146
|
-
|
1147
|
-
|
1148
|
-
|
1149
|
-
|
1150
|
-
|
1328
|
+
def visit_local_variable(ctx)
|
1329
|
+
ctx__variable_id = ctx.variable_id
|
1330
|
+
ctx__parameter_type = ctx.parameter_type
|
1331
|
+
ctx__expression = ctx.expression
|
1332
|
+
|
1333
|
+
ids = visit_if_map(ctx__variable_id)
|
1334
|
+
type = visit_if(ctx__parameter_type)
|
1335
|
+
expression = visit_if(ctx__expression)
|
1151
1336
|
|
1152
1337
|
ids.map do |id|
|
1153
1338
|
Model::Variable.new({
|
@@ -1158,16 +1343,22 @@ module Expressir
|
|
1158
1343
|
end
|
1159
1344
|
end
|
1160
1345
|
|
1161
|
-
def
|
1162
|
-
|
1346
|
+
def visit_logical_expression(ctx)
|
1347
|
+
ctx__expression = ctx.expression
|
1348
|
+
|
1349
|
+
visit_if(ctx__expression)
|
1163
1350
|
end
|
1164
1351
|
|
1165
|
-
def
|
1166
|
-
|
1352
|
+
def visit_logical_literal(ctx)
|
1353
|
+
ctx__TRUE = ctx.TRUE
|
1354
|
+
ctx__FALSE = ctx.FALSE
|
1355
|
+
ctx__UNKNOWN = ctx.UNKNOWN
|
1356
|
+
|
1357
|
+
value = if ctx__TRUE
|
1167
1358
|
Model::Literals::Logical::TRUE
|
1168
|
-
elsif
|
1359
|
+
elsif ctx__FALSE
|
1169
1360
|
Model::Literals::Logical::FALSE
|
1170
|
-
elsif
|
1361
|
+
elsif ctx__UNKNOWN
|
1171
1362
|
Model::Literals::Logical::UNKNOWN
|
1172
1363
|
else
|
1173
1364
|
raise 'Invalid state'
|
@@ -1178,71 +1369,80 @@ module Expressir
|
|
1178
1369
|
})
|
1179
1370
|
end
|
1180
1371
|
|
1181
|
-
def
|
1182
|
-
Model::Types::Logical.new
|
1372
|
+
def visit_logical_type(ctx)
|
1373
|
+
Model::Types::Logical.new
|
1183
1374
|
end
|
1184
1375
|
|
1185
|
-
def
|
1186
|
-
|
1376
|
+
def visit_multiplication_like_op(ctx)
|
1377
|
+
ctx__text = ctx.text
|
1378
|
+
ctx__MULTIPLICATION = ctx__text == '*'
|
1379
|
+
ctx__REAL_DIVISION = ctx__text == '/'
|
1380
|
+
ctx__INTEGER_DIVISION = ctx.DIV
|
1381
|
+
ctx__MODULO = ctx.MOD
|
1382
|
+
ctx__AND = ctx.AND
|
1383
|
+
ctx__COMBINE = ctx__text == '||'
|
1384
|
+
|
1385
|
+
if ctx__MULTIPLICATION
|
1187
1386
|
Model::Expressions::BinaryExpression::MULTIPLICATION
|
1188
|
-
elsif
|
1387
|
+
elsif ctx__REAL_DIVISION
|
1189
1388
|
Model::Expressions::BinaryExpression::REAL_DIVISION
|
1190
|
-
elsif
|
1389
|
+
elsif ctx__INTEGER_DIVISION
|
1191
1390
|
Model::Expressions::BinaryExpression::INTEGER_DIVISION
|
1192
|
-
elsif
|
1391
|
+
elsif ctx__MODULO
|
1193
1392
|
Model::Expressions::BinaryExpression::MODULO
|
1194
|
-
elsif
|
1393
|
+
elsif ctx__AND
|
1195
1394
|
Model::Expressions::BinaryExpression::AND
|
1196
|
-
elsif
|
1395
|
+
elsif ctx__COMBINE
|
1197
1396
|
Model::Expressions::BinaryExpression::COMBINE
|
1198
1397
|
else
|
1199
1398
|
raise 'Invalid state'
|
1200
1399
|
end
|
1201
1400
|
end
|
1202
1401
|
|
1203
|
-
def
|
1204
|
-
|
1205
|
-
|
1206
|
-
|
1207
|
-
|
1208
|
-
else
|
1209
|
-
raise 'Invalid state'
|
1210
|
-
end
|
1402
|
+
def visit_named_types(ctx)
|
1403
|
+
ctx__entity_ref = ctx.entity_ref
|
1404
|
+
ctx__type_ref = ctx.type_ref
|
1405
|
+
|
1406
|
+
visit_if(ctx__entity_ref || ctx__type_ref)
|
1211
1407
|
end
|
1212
1408
|
|
1213
|
-
def
|
1214
|
-
|
1215
|
-
|
1216
|
-
|
1217
|
-
visit(ctx.entityId())
|
1218
|
-
elsif ctx.typeId()
|
1219
|
-
visit(ctx.typeId())
|
1220
|
-
end
|
1409
|
+
def visit_named_type_or_rename(ctx)
|
1410
|
+
ctx__named_types = ctx.named_types
|
1411
|
+
ctx__entity_id = ctx.entity_id
|
1412
|
+
ctx__type_id = ctx.type_id
|
1221
1413
|
|
1414
|
+
ref = visit_if(ctx__named_types)
|
1415
|
+
id = visit_if(ctx__entity_id || ctx__type_id)
|
1416
|
+
|
1417
|
+
if id
|
1222
1418
|
Model::RenamedRef.new({
|
1223
1419
|
ref: ref,
|
1224
1420
|
id: id
|
1225
1421
|
})
|
1226
1422
|
else
|
1227
|
-
|
1423
|
+
ref
|
1228
1424
|
end
|
1229
1425
|
end
|
1230
1426
|
|
1231
|
-
def
|
1232
|
-
Model::Statements::Null.new
|
1427
|
+
def visit_null_stmt(ctx)
|
1428
|
+
Model::Statements::Null.new
|
1233
1429
|
end
|
1234
1430
|
|
1235
|
-
def
|
1236
|
-
Model::Types::Number.new
|
1431
|
+
def visit_number_type(ctx)
|
1432
|
+
Model::Types::Number.new
|
1237
1433
|
end
|
1238
1434
|
|
1239
|
-
def
|
1240
|
-
|
1435
|
+
def visit_numeric_expression(ctx)
|
1436
|
+
ctx__simple_expression = ctx.simple_expression
|
1437
|
+
|
1438
|
+
visit_if(ctx__simple_expression)
|
1241
1439
|
end
|
1242
1440
|
|
1243
|
-
def
|
1441
|
+
def visit_one_of(ctx)
|
1442
|
+
ctx__supertype_expression = ctx.supertype_expression
|
1443
|
+
|
1244
1444
|
ref = Model::Expressions::SimpleReference.new({ id: 'ONEOF' })
|
1245
|
-
parameters =
|
1445
|
+
parameters = visit_if_map(ctx__supertype_expression)
|
1246
1446
|
|
1247
1447
|
Model::Expressions::Call.new({
|
1248
1448
|
ref: ref,
|
@@ -1250,55 +1450,59 @@ module Expressir
|
|
1250
1450
|
})
|
1251
1451
|
end
|
1252
1452
|
|
1253
|
-
def
|
1254
|
-
|
1453
|
+
def visit_parameter(ctx)
|
1454
|
+
ctx__expression = ctx.expression
|
1455
|
+
|
1456
|
+
visit_if(ctx__expression)
|
1255
1457
|
end
|
1256
1458
|
|
1257
|
-
def
|
1258
|
-
|
1459
|
+
def visit_parameter_id(ctx)
|
1460
|
+
ctx__SimpleId = ctx.SimpleId
|
1461
|
+
|
1462
|
+
handle_simple_id(ctx__SimpleId)
|
1259
1463
|
end
|
1260
1464
|
|
1261
|
-
def
|
1262
|
-
|
1263
|
-
|
1264
|
-
|
1265
|
-
|
1266
|
-
|
1267
|
-
visit(ctx.simpleTypes())
|
1268
|
-
else
|
1269
|
-
raise 'Invalid state'
|
1270
|
-
end
|
1465
|
+
def visit_parameter_type(ctx)
|
1466
|
+
ctx__generalized_types = ctx.generalized_types
|
1467
|
+
ctx__named_types = ctx.named_types
|
1468
|
+
ctx__simple_types = ctx.simple_types
|
1469
|
+
|
1470
|
+
visit_if(ctx__generalized_types || ctx__named_types || ctx__simple_types)
|
1271
1471
|
end
|
1272
1472
|
|
1273
|
-
def
|
1274
|
-
|
1473
|
+
def visit_population(ctx)
|
1474
|
+
ctx__entity_ref = ctx.entity_ref
|
1475
|
+
|
1476
|
+
visit_if(ctx__entity_ref)
|
1275
1477
|
end
|
1276
1478
|
|
1277
|
-
def
|
1278
|
-
|
1479
|
+
def visit_precision_spec(ctx)
|
1480
|
+
ctx__numeric_expression = ctx.numeric_expression
|
1481
|
+
|
1482
|
+
visit_if(ctx__numeric_expression)
|
1279
1483
|
end
|
1280
1484
|
|
1281
|
-
def
|
1282
|
-
|
1283
|
-
|
1284
|
-
|
1285
|
-
|
1485
|
+
def visit_primary(ctx)
|
1486
|
+
ctx__literal = ctx.literal
|
1487
|
+
ctx__qualifiable_factor = ctx.qualifiable_factor
|
1488
|
+
ctx__qualifier = ctx.qualifier
|
1489
|
+
|
1490
|
+
if ctx__literal
|
1491
|
+
visit(ctx__literal)
|
1492
|
+
elsif ctx__qualifiable_factor
|
1493
|
+
handle_qualified_ref(visit(ctx__qualifiable_factor), ctx__qualifier)
|
1286
1494
|
else
|
1287
1495
|
raise 'Invalid state'
|
1288
1496
|
end
|
1289
1497
|
end
|
1290
1498
|
|
1291
|
-
def
|
1292
|
-
|
1293
|
-
|
1294
|
-
|
1295
|
-
|
1296
|
-
|
1297
|
-
|
1298
|
-
end
|
1299
|
-
parameters = if ctx.actualParameterList()
|
1300
|
-
ctx.actualParameterList().parameter().map{|ctx| visit(ctx.expression)}
|
1301
|
-
end
|
1499
|
+
def visit_procedure_call_stmt(ctx)
|
1500
|
+
ctx__built_in_procedure = ctx.built_in_procedure
|
1501
|
+
ctx__procedure_ref = ctx.procedure_ref
|
1502
|
+
ctx__actual_parameter_list = ctx.actual_parameter_list
|
1503
|
+
|
1504
|
+
ref = visit_if(ctx__built_in_procedure || ctx__procedure_ref)
|
1505
|
+
parameters = visit_if(ctx__actual_parameter_list)
|
1302
1506
|
|
1303
1507
|
Model::Statements::Call.new({
|
1304
1508
|
ref: ref,
|
@@ -1306,32 +1510,22 @@ module Expressir
|
|
1306
1510
|
})
|
1307
1511
|
end
|
1308
1512
|
|
1309
|
-
def
|
1310
|
-
|
1311
|
-
|
1312
|
-
|
1313
|
-
|
1314
|
-
|
1315
|
-
|
1316
|
-
|
1317
|
-
|
1318
|
-
|
1319
|
-
|
1320
|
-
|
1321
|
-
|
1322
|
-
|
1323
|
-
|
1324
|
-
|
1325
|
-
end
|
1326
|
-
end.flatten
|
1327
|
-
declarations = ctx.algorithmHead().declaration().map{|ctx| visit(ctx)}
|
1328
|
-
constants = if ctx.algorithmHead().constantDecl()
|
1329
|
-
ctx.algorithmHead().constantDecl().constantBody().map{|ctx| visit(ctx)}
|
1330
|
-
end
|
1331
|
-
variables = if ctx.algorithmHead().localDecl()
|
1332
|
-
ctx.algorithmHead().localDecl().localVariable().map{|ctx| visit(ctx)}.flatten
|
1333
|
-
end
|
1334
|
-
statements = ctx.stmt().map{|ctx| visit(ctx)}
|
1513
|
+
def visit_procedure_decl(ctx)
|
1514
|
+
ctx__procedure_head = ctx.procedure_head
|
1515
|
+
ctx__algorithm_head = ctx.algorithm_head
|
1516
|
+
ctx__stmt = ctx.stmt
|
1517
|
+
ctx__procedure_head__procedure_id = ctx__procedure_head&.procedure_id
|
1518
|
+
ctx__procedure_head__procedure_head_parameter = ctx__procedure_head&.procedure_head_parameter
|
1519
|
+
ctx__algorithm_head__declaration = ctx__algorithm_head&.declaration
|
1520
|
+
ctx__algorithm_head__constant_decl = ctx__algorithm_head&.constant_decl
|
1521
|
+
ctx__algorithm_head__local_decl = ctx__algorithm_head&.local_decl
|
1522
|
+
|
1523
|
+
id = visit_if(ctx__procedure_head__procedure_id)
|
1524
|
+
parameters = visit_if_map_flatten(ctx__procedure_head__procedure_head_parameter)
|
1525
|
+
declarations = visit_if_map(ctx__algorithm_head__declaration)
|
1526
|
+
constants = visit_if(ctx__algorithm_head__constant_decl)
|
1527
|
+
variables = visit_if(ctx__algorithm_head__local_decl)
|
1528
|
+
statements = visit_if_map(ctx__stmt)
|
1335
1529
|
|
1336
1530
|
Model::Procedure.new({
|
1337
1531
|
id: id,
|
@@ -1343,62 +1537,80 @@ module Expressir
|
|
1343
1537
|
})
|
1344
1538
|
end
|
1345
1539
|
|
1346
|
-
def
|
1540
|
+
def visit_procedure_head(ctx)
|
1347
1541
|
raise 'Invalid state'
|
1348
1542
|
end
|
1349
1543
|
|
1350
|
-
def
|
1351
|
-
|
1352
|
-
|
1544
|
+
def visit_procedure_head_parameter(ctx)
|
1545
|
+
ctx__formal_parameter = ctx.formal_parameter
|
1546
|
+
ctx__VAR = ctx.VAR
|
1353
1547
|
|
1354
|
-
|
1355
|
-
|
1356
|
-
|
1357
|
-
|
1358
|
-
|
1359
|
-
|
1360
|
-
|
1361
|
-
|
1362
|
-
|
1363
|
-
|
1364
|
-
visit(ctx.population().entityRef())
|
1548
|
+
parameters = visit(ctx__formal_parameter)
|
1549
|
+
|
1550
|
+
if ctx.VAR
|
1551
|
+
parameters.map do |parameter|
|
1552
|
+
Model::Parameter.new({
|
1553
|
+
id: parameter.id,
|
1554
|
+
var: true,
|
1555
|
+
type: parameter.type
|
1556
|
+
})
|
1557
|
+
end
|
1365
1558
|
else
|
1366
|
-
|
1559
|
+
parameters
|
1367
1560
|
end
|
1368
1561
|
end
|
1369
1562
|
|
1370
|
-
def
|
1371
|
-
|
1372
|
-
|
1373
|
-
|
1563
|
+
def visit_procedure_id(ctx)
|
1564
|
+
ctx__SimpleId = ctx.SimpleId
|
1565
|
+
|
1566
|
+
handle_simple_id(ctx__SimpleId)
|
1567
|
+
end
|
1568
|
+
|
1569
|
+
def visit_qualifiable_factor(ctx)
|
1570
|
+
ctx__attribute_ref = ctx.attribute_ref
|
1571
|
+
ctx__constant_factor = ctx.constant_factor
|
1572
|
+
ctx__function_call = ctx.function_call
|
1573
|
+
ctx__general_ref = ctx.general_ref
|
1574
|
+
ctx__population = ctx.population
|
1575
|
+
|
1576
|
+
visit_if(ctx__attribute_ref || ctx__constant_factor || ctx__function_call || ctx__general_ref || ctx__population)
|
1577
|
+
end
|
1578
|
+
|
1579
|
+
def visit_qualified_attribute(ctx)
|
1580
|
+
ctx__group_qualifier = ctx.group_qualifier
|
1581
|
+
ctx__attribute_qualifier = ctx.attribute_qualifier
|
1582
|
+
|
1583
|
+
id = 'SELF'
|
1584
|
+
group_reference = visit_if(ctx__group_qualifier)
|
1585
|
+
attribute_reference = visit_if(ctx__attribute_qualifier)
|
1374
1586
|
|
1375
1587
|
Model::Expressions::AttributeReference.new({
|
1376
1588
|
ref: Model::Expressions::GroupReference.new({
|
1377
1589
|
ref: Model::Expressions::SimpleReference.new({
|
1378
1590
|
id: id
|
1379
1591
|
}),
|
1380
|
-
entity: entity
|
1592
|
+
entity: group_reference.entity
|
1381
1593
|
}),
|
1382
|
-
attribute: attribute
|
1594
|
+
attribute: attribute_reference.attribute
|
1383
1595
|
})
|
1384
1596
|
end
|
1385
1597
|
|
1386
|
-
def
|
1387
|
-
|
1388
|
-
|
1389
|
-
|
1390
|
-
|
1391
|
-
|
1392
|
-
visit(ctx.indexQualifier())
|
1393
|
-
else
|
1394
|
-
raise 'Invalid state'
|
1395
|
-
end
|
1598
|
+
def visit_qualifier(ctx)
|
1599
|
+
ctx__attribute_qualifier = ctx.attribute_qualifier
|
1600
|
+
ctx__group_qualifier = ctx.group_qualifier
|
1601
|
+
ctx__index_qualifier = ctx.index_qualifier
|
1602
|
+
|
1603
|
+
visit_if(ctx__attribute_qualifier || ctx__group_qualifier || ctx__index_qualifier)
|
1396
1604
|
end
|
1397
1605
|
|
1398
|
-
def
|
1399
|
-
|
1400
|
-
|
1401
|
-
|
1606
|
+
def visit_query_expression(ctx)
|
1607
|
+
ctx__variable_id = ctx.variable_id
|
1608
|
+
ctx__aggregate_source = ctx.aggregate_source
|
1609
|
+
ctx__logical_expression = ctx.logical_expression
|
1610
|
+
|
1611
|
+
id = visit_if(ctx__variable_id)
|
1612
|
+
source = visit_if(ctx__aggregate_source)
|
1613
|
+
expression = visit_if(ctx__logical_expression)
|
1402
1614
|
|
1403
1615
|
Model::Expressions::QueryExpression.new({
|
1404
1616
|
id: id,
|
@@ -1407,33 +1619,33 @@ module Expressir
|
|
1407
1619
|
})
|
1408
1620
|
end
|
1409
1621
|
|
1410
|
-
def
|
1411
|
-
|
1412
|
-
|
1413
|
-
|
1622
|
+
def visit_real_type(ctx)
|
1623
|
+
ctx__precision_spec = ctx.precision_spec
|
1624
|
+
|
1625
|
+
precision = visit_if(ctx__precision_spec)
|
1414
1626
|
|
1415
1627
|
Model::Types::Real.new({
|
1416
1628
|
precision: precision
|
1417
1629
|
})
|
1418
1630
|
end
|
1419
1631
|
|
1420
|
-
def
|
1632
|
+
def visit_redeclared_attribute(ctx)
|
1421
1633
|
raise 'Invalid state'
|
1422
1634
|
end
|
1423
1635
|
|
1424
|
-
def
|
1425
|
-
|
1426
|
-
|
1427
|
-
|
1428
|
-
|
1429
|
-
else
|
1430
|
-
raise 'Invalid state'
|
1431
|
-
end
|
1636
|
+
def visit_referenced_attribute(ctx)
|
1637
|
+
ctx__attribute_ref = ctx.attribute_ref
|
1638
|
+
ctx__qualified_attribute = ctx.qualified_attribute
|
1639
|
+
|
1640
|
+
visit_if(ctx__attribute_ref || ctx__qualified_attribute)
|
1432
1641
|
end
|
1433
1642
|
|
1434
|
-
def
|
1435
|
-
|
1436
|
-
|
1643
|
+
def visit_reference_clause(ctx)
|
1644
|
+
ctx__schema_ref = ctx.schema_ref
|
1645
|
+
ctx__resource_or_rename = ctx.resource_or_rename
|
1646
|
+
|
1647
|
+
schema = visit_if(ctx__schema_ref)
|
1648
|
+
items = visit_if_map(ctx__resource_or_rename)
|
1437
1649
|
|
1438
1650
|
Model::Interface.new({
|
1439
1651
|
kind: Model::Interface::REFERENCE,
|
@@ -1442,80 +1654,86 @@ module Expressir
|
|
1442
1654
|
})
|
1443
1655
|
end
|
1444
1656
|
|
1445
|
-
def
|
1446
|
-
|
1657
|
+
def visit_rel_op(ctx)
|
1658
|
+
ctx__text = ctx.text
|
1659
|
+
ctx__LESS_THAN = ctx__text == '<'
|
1660
|
+
ctx__GREATER_THAN = ctx__text == '>'
|
1661
|
+
ctx__LESS_THAN_OR_EQUAL = ctx__text == '<='
|
1662
|
+
ctx__GREATER_THAN_OR_EQUAL = ctx__text == '>='
|
1663
|
+
ctx__NOT_EQUAL = ctx__text == '<>'
|
1664
|
+
ctx__EQUAL = ctx__text == '='
|
1665
|
+
ctx__INSTANCE_NOT_EQUAL = ctx__text == ':<>:'
|
1666
|
+
ctx__INSTANCE_EQUAL = ctx__text == ':=:'
|
1667
|
+
|
1668
|
+
if ctx__LESS_THAN
|
1447
1669
|
Model::Expressions::BinaryExpression::LESS_THAN
|
1448
|
-
elsif
|
1670
|
+
elsif ctx__GREATER_THAN
|
1449
1671
|
Model::Expressions::BinaryExpression::GREATER_THAN
|
1450
|
-
elsif
|
1672
|
+
elsif ctx__LESS_THAN_OR_EQUAL
|
1451
1673
|
Model::Expressions::BinaryExpression::LESS_THAN_OR_EQUAL
|
1452
|
-
elsif
|
1674
|
+
elsif ctx__GREATER_THAN_OR_EQUAL
|
1453
1675
|
Model::Expressions::BinaryExpression::GREATER_THAN_OR_EQUAL
|
1454
|
-
elsif
|
1676
|
+
elsif ctx__NOT_EQUAL
|
1455
1677
|
Model::Expressions::BinaryExpression::NOT_EQUAL
|
1456
|
-
elsif
|
1678
|
+
elsif ctx__EQUAL
|
1457
1679
|
Model::Expressions::BinaryExpression::EQUAL
|
1458
|
-
elsif
|
1680
|
+
elsif ctx__INSTANCE_NOT_EQUAL
|
1459
1681
|
Model::Expressions::BinaryExpression::INSTANCE_NOT_EQUAL
|
1460
|
-
elsif
|
1682
|
+
elsif ctx__INSTANCE_EQUAL
|
1461
1683
|
Model::Expressions::BinaryExpression::INSTANCE_EQUAL
|
1462
1684
|
else
|
1463
1685
|
raise 'Invalid state'
|
1464
1686
|
end
|
1465
1687
|
end
|
1466
1688
|
|
1467
|
-
def
|
1468
|
-
|
1469
|
-
|
1470
|
-
|
1689
|
+
def visit_rel_op_extended(ctx)
|
1690
|
+
ctx__rel_op = ctx.rel_op
|
1691
|
+
ctx__IN = ctx.IN
|
1692
|
+
ctx__LIKE = ctx.LIKE
|
1693
|
+
|
1694
|
+
if ctx__rel_op
|
1695
|
+
visit(ctx__rel_op)
|
1696
|
+
elsif ctx__IN
|
1471
1697
|
Model::Expressions::BinaryExpression::IN
|
1472
|
-
elsif
|
1698
|
+
elsif ctx__LIKE
|
1473
1699
|
Model::Expressions::BinaryExpression::LIKE
|
1474
1700
|
else
|
1475
1701
|
raise 'Invalid state'
|
1476
1702
|
end
|
1477
1703
|
end
|
1478
1704
|
|
1479
|
-
def
|
1480
|
-
|
1481
|
-
|
1482
|
-
|
1483
|
-
|
1484
|
-
|
1485
|
-
|
1486
|
-
|
1487
|
-
visit(ctx.procedureId())
|
1488
|
-
elsif ctx.typeId()
|
1489
|
-
visit(ctx.typeId())
|
1490
|
-
else
|
1491
|
-
raise 'Invalid state'
|
1492
|
-
end
|
1705
|
+
def visit_rename_id(ctx)
|
1706
|
+
ctx__constant_id = ctx.constant_id
|
1707
|
+
ctx__entity_id = ctx.entity_id
|
1708
|
+
ctx__function_id = ctx.function_id
|
1709
|
+
ctx__procedure_id = ctx.procedure_id
|
1710
|
+
ctx__type_id = ctx.type_id
|
1711
|
+
|
1712
|
+
visit_if(ctx__constant_id || ctx__entity_id || ctx__function_id || ctx__procedure_id || ctx__type_id)
|
1493
1713
|
end
|
1494
1714
|
|
1495
|
-
def
|
1715
|
+
def visit_repeat_control(ctx)
|
1496
1716
|
raise 'Invalid state'
|
1497
1717
|
end
|
1498
1718
|
|
1499
|
-
def
|
1500
|
-
|
1501
|
-
|
1502
|
-
|
1503
|
-
|
1504
|
-
|
1505
|
-
|
1506
|
-
|
1507
|
-
|
1508
|
-
|
1509
|
-
|
1510
|
-
|
1511
|
-
|
1512
|
-
|
1513
|
-
|
1514
|
-
|
1515
|
-
until_expression =
|
1516
|
-
|
1517
|
-
end
|
1518
|
-
statements = ctx.stmt().map{|ctx| visit(ctx)}
|
1719
|
+
def visit_repeat_stmt(ctx)
|
1720
|
+
ctx__repeat_control = ctx.repeat_control
|
1721
|
+
ctx__stmt = ctx.stmt
|
1722
|
+
ctx__repeat_control__increment_control = ctx__repeat_control&.increment_control
|
1723
|
+
ctx__repeat_control__increment_control__variable_id = ctx__repeat_control__increment_control&.variable_id
|
1724
|
+
ctx__repeat_control__increment_control__bound1 = ctx__repeat_control__increment_control&.bound1
|
1725
|
+
ctx__repeat_control__increment_control__bound2 = ctx__repeat_control__increment_control&.bound2
|
1726
|
+
ctx__repeat_control__increment_control__increment = ctx__repeat_control__increment_control&.increment
|
1727
|
+
ctx__repeat_control__while_control = ctx__repeat_control&.while_control
|
1728
|
+
ctx__repeat_control__until_control = ctx__repeat_control&.until_control
|
1729
|
+
|
1730
|
+
id = visit_if(ctx__repeat_control__increment_control__variable_id)
|
1731
|
+
bound1 = visit_if(ctx__repeat_control__increment_control__bound1)
|
1732
|
+
bound2 = visit_if(ctx__repeat_control__increment_control__bound2)
|
1733
|
+
increment = visit_if(ctx__repeat_control__increment_control__increment)
|
1734
|
+
while_expression = visit_if(ctx__repeat_control__while_control)
|
1735
|
+
until_expression = visit_if(ctx__repeat_control__until_control)
|
1736
|
+
statements = visit_if_map(ctx__stmt)
|
1519
1737
|
|
1520
1738
|
Model::Statements::Repeat.new({
|
1521
1739
|
id: id,
|
@@ -1528,62 +1746,71 @@ module Expressir
|
|
1528
1746
|
})
|
1529
1747
|
end
|
1530
1748
|
|
1531
|
-
def
|
1532
|
-
|
1749
|
+
def visit_repetition(ctx)
|
1750
|
+
ctx__numeric_expression = ctx.numeric_expression
|
1751
|
+
|
1752
|
+
visit_if(ctx__numeric_expression)
|
1533
1753
|
end
|
1534
1754
|
|
1535
|
-
def
|
1536
|
-
|
1537
|
-
|
1538
|
-
id = visit(ctx.renameId())
|
1755
|
+
def visit_resource_or_rename(ctx)
|
1756
|
+
ctx__resource_ref = ctx.resource_ref
|
1757
|
+
ctx__rename_id = ctx.rename_id
|
1539
1758
|
|
1540
|
-
|
1541
|
-
|
1542
|
-
|
1543
|
-
|
1544
|
-
else
|
1545
|
-
visit(ctx.resourceRef())
|
1546
|
-
end
|
1547
|
-
end
|
1759
|
+
if ctx__resource_ref
|
1760
|
+
if ctx__rename_id
|
1761
|
+
ref = visit(ctx__resource_ref)
|
1762
|
+
id = visit(ctx__rename_id)
|
1548
1763
|
|
1549
|
-
|
1550
|
-
|
1551
|
-
|
1552
|
-
|
1553
|
-
|
1554
|
-
|
1555
|
-
|
1556
|
-
elsif ctx.procedureRef()
|
1557
|
-
visit(ctx.procedureRef())
|
1558
|
-
elsif ctx.typeRef()
|
1559
|
-
visit(ctx.typeRef())
|
1764
|
+
Model::RenamedRef.new({
|
1765
|
+
ref: ref,
|
1766
|
+
id: id
|
1767
|
+
})
|
1768
|
+
else
|
1769
|
+
visit(ctx__resource_ref)
|
1770
|
+
end
|
1560
1771
|
else
|
1561
1772
|
raise 'Invalid state'
|
1562
1773
|
end
|
1563
1774
|
end
|
1564
1775
|
|
1565
|
-
def
|
1566
|
-
|
1567
|
-
|
1568
|
-
|
1776
|
+
def visit_resource_ref(ctx)
|
1777
|
+
ctx__constant_ref = ctx.constant_ref
|
1778
|
+
ctx__entity_ref = ctx.entity_ref
|
1779
|
+
ctx__function_ref = ctx.function_ref
|
1780
|
+
ctx__procedure_ref = ctx.procedure_ref
|
1781
|
+
ctx__type_ref = ctx.type_ref
|
1782
|
+
|
1783
|
+
visit_if(ctx__constant_ref || ctx__entity_ref || ctx__function_ref || ctx__procedure_ref || ctx__type_ref)
|
1784
|
+
end
|
1785
|
+
|
1786
|
+
def visit_return_stmt(ctx)
|
1787
|
+
ctx__expression = ctx.expression
|
1788
|
+
|
1789
|
+
expression = visit_if(ctx__expression)
|
1569
1790
|
|
1570
1791
|
Model::Statements::Return.new({
|
1571
1792
|
expression: expression
|
1572
1793
|
})
|
1573
1794
|
end
|
1574
1795
|
|
1575
|
-
def
|
1576
|
-
|
1577
|
-
|
1578
|
-
|
1579
|
-
|
1580
|
-
|
1581
|
-
|
1582
|
-
|
1583
|
-
|
1584
|
-
|
1585
|
-
|
1586
|
-
|
1796
|
+
def visit_rule_decl(ctx)
|
1797
|
+
ctx__rule_head = ctx.rule_head
|
1798
|
+
ctx__algorithm_head = ctx.algorithm_head
|
1799
|
+
ctx__stmt = ctx.stmt
|
1800
|
+
ctx__where_clause = ctx.where_clause
|
1801
|
+
ctx__rule_head__rule_id = ctx__rule_head&.rule_id
|
1802
|
+
ctx__rule_head__entity_ref = ctx__rule_head&.entity_ref
|
1803
|
+
ctx__algorithm_head__declaration = ctx__algorithm_head&.declaration
|
1804
|
+
ctx__algorithm_head__constant_decl = ctx__algorithm_head&.constant_decl
|
1805
|
+
ctx__algorithm_head__local_decl = ctx__algorithm_head&.local_decl
|
1806
|
+
|
1807
|
+
id = visit_if(ctx__rule_head__rule_id)
|
1808
|
+
applies_to = visit_if_map(ctx__rule_head__entity_ref)
|
1809
|
+
declarations = visit_if_map(ctx__algorithm_head__declaration)
|
1810
|
+
constants = visit_if(ctx__algorithm_head__constant_decl)
|
1811
|
+
variables = visit_if(ctx__algorithm_head__local_decl)
|
1812
|
+
statements = visit_if_map(ctx__stmt)
|
1813
|
+
where = visit_if(ctx__where_clause)
|
1587
1814
|
|
1588
1815
|
Model::Rule.new({
|
1589
1816
|
id: id,
|
@@ -1596,35 +1823,46 @@ module Expressir
|
|
1596
1823
|
})
|
1597
1824
|
end
|
1598
1825
|
|
1599
|
-
def
|
1826
|
+
def visit_rule_head(ctx)
|
1600
1827
|
raise 'Invalid state'
|
1601
1828
|
end
|
1602
1829
|
|
1603
|
-
def
|
1604
|
-
|
1830
|
+
def visit_rule_id(ctx)
|
1831
|
+
ctx__SimpleId = ctx.SimpleId
|
1832
|
+
|
1833
|
+
handle_simple_id(ctx__SimpleId)
|
1605
1834
|
end
|
1606
1835
|
|
1607
|
-
def
|
1608
|
-
|
1836
|
+
def visit_rule_label_id(ctx)
|
1837
|
+
ctx__SimpleId = ctx.SimpleId
|
1838
|
+
|
1839
|
+
handle_simple_id(ctx__SimpleId)
|
1609
1840
|
end
|
1610
1841
|
|
1611
|
-
def
|
1842
|
+
def visit_schema_body(ctx)
|
1612
1843
|
raise 'Invalid state'
|
1613
1844
|
end
|
1614
1845
|
|
1615
|
-
def
|
1616
|
-
|
1617
|
-
|
1618
|
-
|
1619
|
-
|
1620
|
-
|
1621
|
-
|
1622
|
-
|
1623
|
-
|
1624
|
-
|
1625
|
-
|
1626
|
-
|
1627
|
-
|
1846
|
+
def visit_schema_body_declaration(ctx)
|
1847
|
+
ctx__declaration = ctx.declaration
|
1848
|
+
ctx__rule_decl = ctx.rule_decl
|
1849
|
+
|
1850
|
+
visit_if(ctx__declaration || ctx__rule_decl)
|
1851
|
+
end
|
1852
|
+
|
1853
|
+
def visit_schema_decl(ctx)
|
1854
|
+
ctx__schema_id = ctx.schema_id
|
1855
|
+
ctx__schema_version_id = ctx.schema_version_id
|
1856
|
+
ctx__schema_body = ctx.schema_body
|
1857
|
+
ctx__schema_body__interface_specification = ctx__schema_body&.interface_specification
|
1858
|
+
ctx__schema_body__constant_decl = ctx__schema_body&.constant_decl
|
1859
|
+
ctx__schema_body__schema_body_declaration = ctx__schema_body&.schema_body_declaration
|
1860
|
+
|
1861
|
+
id = visit_if(ctx__schema_id)
|
1862
|
+
version = visit_if(ctx__schema_version_id)
|
1863
|
+
interfaces = visit_if_map(ctx__schema_body__interface_specification)
|
1864
|
+
constants = visit_if(ctx__schema_body__constant_decl)
|
1865
|
+
declarations = visit_if_map(ctx__schema_body__schema_body_declaration)
|
1628
1866
|
|
1629
1867
|
Model::Schema.new({
|
1630
1868
|
id: id,
|
@@ -1635,38 +1873,47 @@ module Expressir
|
|
1635
1873
|
})
|
1636
1874
|
end
|
1637
1875
|
|
1638
|
-
def
|
1639
|
-
|
1876
|
+
def visit_schema_id(ctx)
|
1877
|
+
ctx__SimpleId = ctx.SimpleId
|
1878
|
+
|
1879
|
+
handle_simple_id(ctx__SimpleId)
|
1640
1880
|
end
|
1641
1881
|
|
1642
|
-
def
|
1643
|
-
|
1882
|
+
def visit_schema_version_id(ctx)
|
1883
|
+
ctx__string_literal = ctx.string_literal
|
1884
|
+
|
1885
|
+
visit_if(ctx__string_literal)
|
1644
1886
|
end
|
1645
1887
|
|
1646
|
-
def
|
1888
|
+
def visit_selector(ctx)
|
1647
1889
|
raise 'Invalid state'
|
1648
1890
|
end
|
1649
1891
|
|
1650
|
-
def
|
1651
|
-
|
1892
|
+
def visit_select_extension(ctx)
|
1893
|
+
ctx__named_types = ctx.named_types
|
1894
|
+
|
1895
|
+
visit_if_map(ctx__named_types)
|
1652
1896
|
end
|
1653
1897
|
|
1654
|
-
def
|
1655
|
-
|
1898
|
+
def visit_select_list(ctx)
|
1899
|
+
ctx__named_types = ctx.named_types
|
1900
|
+
|
1901
|
+
visit_if_map(ctx__named_types)
|
1656
1902
|
end
|
1657
1903
|
|
1658
|
-
def
|
1659
|
-
|
1660
|
-
|
1661
|
-
|
1662
|
-
|
1663
|
-
|
1664
|
-
|
1665
|
-
|
1666
|
-
|
1667
|
-
|
1668
|
-
|
1669
|
-
|
1904
|
+
def visit_select_type(ctx)
|
1905
|
+
ctx__EXTENSIBLE = ctx.EXTENSIBLE
|
1906
|
+
ctx__GENERIC_ENTITY = ctx.GENERIC_ENTITY
|
1907
|
+
ctx__select_list = ctx.select_list
|
1908
|
+
ctx__select_extension = ctx.select_extension
|
1909
|
+
ctx__select_extension__type_ref = ctx.select_extension&.type_ref
|
1910
|
+
ctx__select_extension__select_list = ctx__select_extension&.select_list
|
1911
|
+
|
1912
|
+
extensible = !!ctx__EXTENSIBLE
|
1913
|
+
generic_entity = !!ctx__GENERIC_ENTITY
|
1914
|
+
items = visit_if(ctx__select_list)
|
1915
|
+
extension_type = visit_if(ctx__select_extension__type_ref)
|
1916
|
+
extension_items = visit_if(ctx__select_extension__select_list)
|
1670
1917
|
|
1671
1918
|
Model::Types::Select.new({
|
1672
1919
|
extensible: extensible,
|
@@ -1677,14 +1924,15 @@ module Expressir
|
|
1677
1924
|
})
|
1678
1925
|
end
|
1679
1926
|
|
1680
|
-
def
|
1681
|
-
|
1682
|
-
|
1683
|
-
|
1684
|
-
|
1685
|
-
|
1686
|
-
|
1687
|
-
|
1927
|
+
def visit_set_type(ctx)
|
1928
|
+
ctx__bound_spec = ctx.bound_spec
|
1929
|
+
ctx__instantiable_type = ctx.instantiable_type
|
1930
|
+
ctx__bound_spec__bound1 = ctx__bound_spec&.bound1
|
1931
|
+
ctx__bound_spec__bound2 = ctx__bound_spec&.bound2
|
1932
|
+
|
1933
|
+
bound1 = visit_if(ctx__bound_spec__bound1)
|
1934
|
+
bound2 = visit_if(ctx__bound_spec__bound2)
|
1935
|
+
base_type = visit_if(ctx__instantiable_type)
|
1688
1936
|
|
1689
1937
|
Model::Types::Set.new({
|
1690
1938
|
bound1: bound1,
|
@@ -1693,122 +1941,112 @@ module Expressir
|
|
1693
1941
|
})
|
1694
1942
|
end
|
1695
1943
|
|
1696
|
-
def
|
1697
|
-
|
1698
|
-
|
1699
|
-
operators = ctx.addLikeOp().map{|ctx| visit(ctx)}
|
1944
|
+
def visit_simple_expression(ctx)
|
1945
|
+
ctx__term = ctx.term
|
1946
|
+
ctx__add_like_op = ctx.add_like_op
|
1700
1947
|
|
1701
|
-
|
1702
|
-
|
1703
|
-
|
1948
|
+
if ctx__term
|
1949
|
+
if ctx__term.length >= 2
|
1950
|
+
if ctx__add_like_op and ctx__add_like_op.length == ctx__term.length - 1
|
1951
|
+
operands = ctx__term.map(&self.method(:visit))
|
1952
|
+
operators = ctx__add_like_op.map(&self.method(:visit))
|
1953
|
+
|
1954
|
+
handle_binary_expression(operands, operators)
|
1955
|
+
else
|
1956
|
+
raise 'Invalid state'
|
1957
|
+
end
|
1958
|
+
elsif ctx__term.length == 1
|
1959
|
+
visit(ctx__term[0])
|
1960
|
+
else
|
1961
|
+
raise 'Invalid state'
|
1962
|
+
end
|
1704
1963
|
end
|
1705
1964
|
end
|
1706
1965
|
|
1707
|
-
def
|
1708
|
-
|
1709
|
-
|
1710
|
-
|
1711
|
-
|
1712
|
-
|
1713
|
-
|
1714
|
-
|
1715
|
-
visit(ctx.interval())
|
1716
|
-
elsif ctx.queryExpression()
|
1717
|
-
visit(ctx.queryExpression())
|
1718
|
-
elsif !ctx.unaryOp() && ctx.expression()
|
1719
|
-
visit(ctx.expression())
|
1720
|
-
elsif !ctx.unaryOp() && ctx.primary()
|
1721
|
-
visit(ctx.primary())
|
1722
|
-
elsif ctx.unaryOp() && ctx.expression()
|
1723
|
-
operator = visit(ctx.unaryOp())
|
1724
|
-
operand = visit(ctx.expression())
|
1725
|
-
|
1726
|
-
Model::Expressions::UnaryExpression.new({
|
1727
|
-
operator: operator,
|
1728
|
-
operand: operand
|
1729
|
-
})
|
1730
|
-
elsif ctx.unaryOp() && ctx.primary()
|
1731
|
-
operator = visit(ctx.unaryOp())
|
1732
|
-
operand = visit(ctx.primary())
|
1966
|
+
def visit_simple_factor(ctx)
|
1967
|
+
ctx__aggregate_initializer = ctx.aggregate_initializer
|
1968
|
+
ctx__entity_constructor = ctx.entity_constructor
|
1969
|
+
ctx__enumeration_reference = ctx.enumeration_reference
|
1970
|
+
ctx__interval = ctx.interval
|
1971
|
+
ctx__query_expression = ctx.query_expression
|
1972
|
+
ctx__simple_factor_expression = ctx.simple_factor_expression
|
1973
|
+
ctx__simple_factor_unary_expression = ctx.simple_factor_unary_expression
|
1733
1974
|
|
1734
|
-
|
1735
|
-
operator: operator,
|
1736
|
-
operand: operand
|
1737
|
-
})
|
1738
|
-
else
|
1739
|
-
raise 'Invalid state'
|
1740
|
-
end
|
1975
|
+
visit_if(ctx__aggregate_initializer || ctx__entity_constructor || ctx__enumeration_reference || ctx__interval || ctx__query_expression || ctx__simple_factor_expression || ctx__simple_factor_unary_expression)
|
1741
1976
|
end
|
1742
1977
|
|
1743
|
-
def
|
1744
|
-
|
1745
|
-
|
1746
|
-
|
1747
|
-
|
1748
|
-
elsif ctx.integerType()
|
1749
|
-
visit(ctx.integerType())
|
1750
|
-
elsif ctx.logicalType()
|
1751
|
-
visit(ctx.logicalType())
|
1752
|
-
elsif ctx.numberType()
|
1753
|
-
visit(ctx.numberType())
|
1754
|
-
elsif ctx.realType()
|
1755
|
-
visit(ctx.realType())
|
1756
|
-
elsif ctx.stringType()
|
1757
|
-
visit(ctx.stringType())
|
1758
|
-
else
|
1759
|
-
raise 'Invalid state'
|
1760
|
-
end
|
1978
|
+
def visit_simple_factor_expression(ctx)
|
1979
|
+
ctx__expression = ctx.expression
|
1980
|
+
ctx__primary = ctx.primary
|
1981
|
+
|
1982
|
+
visit_if(ctx__expression || ctx__primary)
|
1761
1983
|
end
|
1762
1984
|
|
1763
|
-
def
|
1764
|
-
|
1765
|
-
|
1766
|
-
|
1767
|
-
|
1768
|
-
|
1769
|
-
|
1770
|
-
|
1771
|
-
|
1772
|
-
|
1773
|
-
|
1774
|
-
|
1775
|
-
|
1776
|
-
|
1777
|
-
|
1778
|
-
|
1779
|
-
|
1780
|
-
|
1781
|
-
|
1782
|
-
|
1783
|
-
|
1784
|
-
|
1785
|
-
|
1786
|
-
|
1787
|
-
|
1788
|
-
|
1789
|
-
|
1790
|
-
else
|
1791
|
-
raise 'Invalid state'
|
1792
|
-
end
|
1985
|
+
def visit_simple_factor_unary_expression(ctx)
|
1986
|
+
ctx__unary_op = ctx.unary_op
|
1987
|
+
ctx__simple_factor_expression = ctx.simple_factor_expression
|
1988
|
+
|
1989
|
+
operator = visit_if(ctx__unary_op)
|
1990
|
+
operand = visit_if(ctx__simple_factor_expression)
|
1991
|
+
|
1992
|
+
Model::Expressions::UnaryExpression.new({
|
1993
|
+
operator: operator,
|
1994
|
+
operand: operand
|
1995
|
+
})
|
1996
|
+
end
|
1997
|
+
|
1998
|
+
def visit_simple_types(ctx)
|
1999
|
+
ctx__binary_type = ctx.binary_type
|
2000
|
+
ctx__boolean_type = ctx.boolean_type
|
2001
|
+
ctx__integer_type = ctx.integer_type
|
2002
|
+
ctx__logical_type = ctx.logical_type
|
2003
|
+
ctx__number_type = ctx.number_type
|
2004
|
+
ctx__real_type = ctx.real_type
|
2005
|
+
ctx__string_type = ctx.string_type
|
2006
|
+
|
2007
|
+
visit_if(ctx__binary_type || ctx__boolean_type || ctx__integer_type || ctx__logical_type || ctx__number_type || ctx__real_type || ctx__string_type)
|
2008
|
+
end
|
2009
|
+
|
2010
|
+
def visit_skip_stmt(ctx)
|
2011
|
+
Model::Statements::Skip.new
|
1793
2012
|
end
|
1794
2013
|
|
1795
|
-
def
|
1796
|
-
|
1797
|
-
|
1798
|
-
|
1799
|
-
|
2014
|
+
def visit_stmt(ctx)
|
2015
|
+
ctx__alias_stmt = ctx.alias_stmt
|
2016
|
+
ctx__assignment_stmt = ctx.assignment_stmt
|
2017
|
+
ctx__case_stmt = ctx.case_stmt
|
2018
|
+
ctx__compound_stmt = ctx.compound_stmt
|
2019
|
+
ctx__escape_stmt = ctx.escape_stmt
|
2020
|
+
ctx__if_stmt = ctx.if_stmt
|
2021
|
+
ctx__null_stmt = ctx.null_stmt
|
2022
|
+
ctx__procedure_call_stmt = ctx.procedure_call_stmt
|
2023
|
+
ctx__repeat_stmt = ctx.repeat_stmt
|
2024
|
+
ctx__return_stmt = ctx.return_stmt
|
2025
|
+
ctx__skip_stmt = ctx.skip_stmt
|
2026
|
+
|
2027
|
+
visit_if(ctx__alias_stmt || ctx__assignment_stmt || ctx__case_stmt || ctx__compound_stmt || ctx__escape_stmt || ctx__if_stmt || ctx__null_stmt || ctx__procedure_call_stmt || ctx__repeat_stmt || ctx__return_stmt || ctx__skip_stmt)
|
2028
|
+
end
|
2029
|
+
|
2030
|
+
def visit_string_literal(ctx)
|
2031
|
+
ctx__SimpleStringLiteral = ctx.SimpleStringLiteral
|
2032
|
+
ctx__EncodedStringLiteral = ctx.EncodedStringLiteral
|
2033
|
+
|
2034
|
+
if ctx__SimpleStringLiteral
|
2035
|
+
handle_simple_string_literal(ctx__SimpleStringLiteral)
|
2036
|
+
elsif ctx__EncodedStringLiteral
|
2037
|
+
handle_encoded_string_literal(ctx__EncodedStringLiteral)
|
1800
2038
|
else
|
1801
2039
|
raise 'Invalid state'
|
1802
2040
|
end
|
1803
2041
|
end
|
1804
2042
|
|
1805
|
-
def
|
1806
|
-
|
1807
|
-
|
1808
|
-
|
1809
|
-
|
1810
|
-
|
1811
|
-
|
2043
|
+
def visit_string_type(ctx)
|
2044
|
+
ctx__width_spec = ctx.width_spec
|
2045
|
+
ctx__width_spec__width = ctx__width_spec&.width
|
2046
|
+
ctx__width_spec__FIXED = ctx__width_spec&.FIXED
|
2047
|
+
|
2048
|
+
width = visit_if(ctx__width_spec__width)
|
2049
|
+
fixed = !!ctx__width_spec__FIXED
|
1812
2050
|
|
1813
2051
|
Model::Types::String.new({
|
1814
2052
|
width: width,
|
@@ -1816,28 +2054,34 @@ module Expressir
|
|
1816
2054
|
})
|
1817
2055
|
end
|
1818
2056
|
|
1819
|
-
def
|
2057
|
+
def visit_subsuper(ctx)
|
1820
2058
|
raise 'Invalid state'
|
1821
2059
|
end
|
1822
2060
|
|
1823
|
-
def
|
1824
|
-
|
2061
|
+
def visit_subtype_constraint(ctx)
|
2062
|
+
ctx__supertype_expression = ctx.supertype_expression
|
2063
|
+
|
2064
|
+
visit_if(ctx__supertype_expression)
|
1825
2065
|
end
|
1826
2066
|
|
1827
|
-
def
|
2067
|
+
def visit_subtype_constraint_body(ctx)
|
1828
2068
|
raise 'Invalid state'
|
1829
2069
|
end
|
1830
2070
|
|
1831
|
-
def
|
1832
|
-
|
1833
|
-
|
1834
|
-
|
1835
|
-
|
1836
|
-
|
1837
|
-
|
1838
|
-
|
1839
|
-
|
1840
|
-
|
2071
|
+
def visit_subtype_constraint_decl(ctx)
|
2072
|
+
ctx__subtype_constraint_head = ctx.subtype_constraint_head
|
2073
|
+
ctx__subtype_constraint_body = ctx.subtype_constraint_body
|
2074
|
+
ctx__subtype_constraint_head__subtype_constraint_id = ctx__subtype_constraint_head&.subtype_constraint_id
|
2075
|
+
ctx__subtype_constraint_head__entity_ref = ctx__subtype_constraint_head&.entity_ref
|
2076
|
+
ctx__subtype_constraint_body__abstract_supertype = ctx__subtype_constraint_body&.abstract_supertype
|
2077
|
+
ctx__subtype_constraint_body__total_over = ctx__subtype_constraint_body&.total_over
|
2078
|
+
ctx__subtype_constraint_body__supertype_expression = ctx__subtype_constraint_body&.supertype_expression
|
2079
|
+
|
2080
|
+
id = visit_if(ctx__subtype_constraint_head__subtype_constraint_id)
|
2081
|
+
applies_to = visit_if(ctx__subtype_constraint_head__entity_ref)
|
2082
|
+
abstract = !!ctx__subtype_constraint_body__abstract_supertype
|
2083
|
+
total_over = visit_if(ctx__subtype_constraint_body__total_over)
|
2084
|
+
supertype_expression = visit_if(ctx__subtype_constraint_body__supertype_expression)
|
1841
2085
|
|
1842
2086
|
Model::SubtypeConstraint.new({
|
1843
2087
|
id: id,
|
@@ -1848,89 +2092,130 @@ module Expressir
|
|
1848
2092
|
})
|
1849
2093
|
end
|
1850
2094
|
|
1851
|
-
def
|
2095
|
+
def visit_subtype_constraint_head(ctx)
|
1852
2096
|
raise 'Invalid state'
|
1853
2097
|
end
|
1854
2098
|
|
1855
|
-
def
|
1856
|
-
|
2099
|
+
def visit_subtype_constraint_id(ctx)
|
2100
|
+
ctx__SimpleId = ctx.SimpleId
|
2101
|
+
|
2102
|
+
handle_simple_id(ctx__SimpleId)
|
1857
2103
|
end
|
1858
2104
|
|
1859
|
-
def
|
1860
|
-
|
2105
|
+
def visit_subtype_declaration(ctx)
|
2106
|
+
ctx__entity_ref = ctx.entity_ref
|
2107
|
+
|
2108
|
+
visit_if_map(ctx__entity_ref)
|
1861
2109
|
end
|
1862
2110
|
|
1863
|
-
def
|
2111
|
+
def visit_supertype_constraint(ctx)
|
1864
2112
|
raise 'Invalid state'
|
1865
2113
|
end
|
1866
2114
|
|
1867
|
-
def
|
1868
|
-
|
1869
|
-
|
1870
|
-
operators = ctx.ANDOR().map{|ctx| Model::Expressions::BinaryExpression::ANDOR}
|
2115
|
+
def visit_supertype_expression(ctx)
|
2116
|
+
ctx__supertype_factor = ctx.supertype_factor
|
2117
|
+
ctx__ANDOR = ctx.ANDOR
|
1871
2118
|
|
1872
|
-
|
1873
|
-
|
1874
|
-
|
2119
|
+
if ctx__supertype_factor
|
2120
|
+
if ctx__supertype_factor.length >= 2
|
2121
|
+
if ctx__ANDOR and ctx__ANDOR.length == ctx__supertype_factor.length - 1
|
2122
|
+
operands = ctx__supertype_factor.map(&self.method(:visit))
|
2123
|
+
operators = ctx__ANDOR.map{Model::Expressions::BinaryExpression::ANDOR}
|
2124
|
+
|
2125
|
+
handle_binary_expression(operands, operators)
|
2126
|
+
else
|
2127
|
+
raise 'Invalid state'
|
2128
|
+
end
|
2129
|
+
elsif ctx__supertype_factor.length == 1
|
2130
|
+
visit(ctx__supertype_factor[0])
|
2131
|
+
else
|
2132
|
+
raise 'Invalid state'
|
2133
|
+
end
|
1875
2134
|
end
|
1876
2135
|
end
|
1877
2136
|
|
1878
|
-
def
|
1879
|
-
|
1880
|
-
|
1881
|
-
operators = ctx.AND().map{|ctx| Model::Expressions::BinaryExpression::AND}
|
2137
|
+
def visit_supertype_factor(ctx)
|
2138
|
+
ctx__supertype_term = ctx.supertype_term
|
2139
|
+
ctx__AND = ctx.AND
|
1882
2140
|
|
1883
|
-
|
1884
|
-
|
1885
|
-
|
2141
|
+
if ctx__supertype_term
|
2142
|
+
if ctx__supertype_term.length >= 2
|
2143
|
+
if ctx__AND and ctx__AND.length == ctx__supertype_term.length - 1
|
2144
|
+
operands = ctx__supertype_term.map(&self.method(:visit))
|
2145
|
+
operators = ctx__AND.map{Model::Expressions::BinaryExpression::AND}
|
2146
|
+
|
2147
|
+
handle_binary_expression(operands, operators)
|
2148
|
+
else
|
2149
|
+
raise 'Invalid state'
|
2150
|
+
end
|
2151
|
+
elsif ctx__supertype_term.length == 1
|
2152
|
+
visit(ctx__supertype_term[0])
|
2153
|
+
else
|
2154
|
+
raise 'Invalid state'
|
2155
|
+
end
|
1886
2156
|
end
|
1887
2157
|
end
|
1888
2158
|
|
1889
|
-
def
|
1890
|
-
|
2159
|
+
def visit_supertype_rule(ctx)
|
2160
|
+
ctx__subtype_constraint = ctx.subtype_constraint
|
2161
|
+
|
2162
|
+
visit_if(ctx__subtype_constraint)
|
1891
2163
|
end
|
1892
2164
|
|
1893
|
-
def
|
1894
|
-
|
1895
|
-
|
1896
|
-
|
1897
|
-
|
1898
|
-
|
1899
|
-
visit(ctx.supertypeExpression())
|
1900
|
-
else
|
1901
|
-
raise 'Invalid state'
|
1902
|
-
end
|
2165
|
+
def visit_supertype_term(ctx)
|
2166
|
+
ctx__entity_ref = ctx.entity_ref
|
2167
|
+
ctx__one_of = ctx.one_of
|
2168
|
+
ctx__supertype_expression = ctx.supertype_expression
|
2169
|
+
|
2170
|
+
visit_if(ctx__entity_ref || ctx__one_of || ctx__supertype_expression)
|
1903
2171
|
end
|
1904
2172
|
|
1905
|
-
def
|
1906
|
-
|
2173
|
+
def visit_syntax(ctx)
|
2174
|
+
ctx__schema_decl = ctx.schema_decl
|
2175
|
+
|
2176
|
+
schemas = visit_if_map(ctx__schema_decl)
|
1907
2177
|
|
1908
2178
|
Model::Repository.new({
|
1909
2179
|
schemas: schemas
|
1910
2180
|
})
|
1911
2181
|
end
|
1912
2182
|
|
1913
|
-
def
|
1914
|
-
|
1915
|
-
|
1916
|
-
operators = ctx.multiplicationLikeOp().map{|ctx| visit(ctx)}
|
2183
|
+
def visit_term(ctx)
|
2184
|
+
ctx__factor = ctx.factor
|
2185
|
+
ctx__multiplication_like_op = ctx.multiplication_like_op
|
1917
2186
|
|
1918
|
-
|
1919
|
-
|
1920
|
-
|
2187
|
+
if ctx__factor
|
2188
|
+
if ctx__factor.length >= 2
|
2189
|
+
if ctx__multiplication_like_op and ctx__multiplication_like_op.length == ctx__factor.length - 1
|
2190
|
+
operands = ctx__factor.map(&self.method(:visit))
|
2191
|
+
operators = ctx__multiplication_like_op.map(&self.method(:visit))
|
2192
|
+
|
2193
|
+
handle_binary_expression(operands, operators)
|
2194
|
+
else
|
2195
|
+
raise 'Invalid state'
|
2196
|
+
end
|
2197
|
+
elsif ctx__factor.length == 1
|
2198
|
+
visit(ctx__factor[0])
|
2199
|
+
else
|
2200
|
+
raise 'Invalid state'
|
2201
|
+
end
|
1921
2202
|
end
|
1922
2203
|
end
|
1923
2204
|
|
1924
|
-
def
|
1925
|
-
|
2205
|
+
def visit_total_over(ctx)
|
2206
|
+
ctx__entity_ref = ctx.entity_ref
|
2207
|
+
|
2208
|
+
visit_if_map(ctx__entity_ref)
|
1926
2209
|
end
|
1927
2210
|
|
1928
|
-
def
|
1929
|
-
|
1930
|
-
|
1931
|
-
|
1932
|
-
|
1933
|
-
|
2211
|
+
def visit_type_decl(ctx)
|
2212
|
+
ctx__type_id = ctx.type_id
|
2213
|
+
ctx__underlying_type = ctx.underlying_type
|
2214
|
+
ctx__where_clause = ctx.where_clause
|
2215
|
+
|
2216
|
+
id = visit_if(ctx__type_id)
|
2217
|
+
type = visit_if(ctx__underlying_type)
|
2218
|
+
where = visit_if(ctx__where_clause)
|
1934
2219
|
|
1935
2220
|
Model::Type.new({
|
1936
2221
|
id: id,
|
@@ -1939,55 +2224,61 @@ module Expressir
|
|
1939
2224
|
})
|
1940
2225
|
end
|
1941
2226
|
|
1942
|
-
def
|
1943
|
-
|
2227
|
+
def visit_type_id(ctx)
|
2228
|
+
ctx__SimpleId = ctx.SimpleId
|
2229
|
+
|
2230
|
+
handle_simple_id(ctx__SimpleId)
|
1944
2231
|
end
|
1945
2232
|
|
1946
|
-
def
|
1947
|
-
|
1948
|
-
|
1949
|
-
|
1950
|
-
|
1951
|
-
else
|
1952
|
-
raise 'Invalid state'
|
1953
|
-
end
|
2233
|
+
def visit_type_label(ctx)
|
2234
|
+
ctx__type_label_id = ctx.type_label_id
|
2235
|
+
ctx__type_label_ref = ctx.type_label_ref
|
2236
|
+
|
2237
|
+
visit_if(ctx__type_label_id || ctx__type_label_ref)
|
1954
2238
|
end
|
1955
2239
|
|
1956
|
-
def
|
1957
|
-
|
2240
|
+
def visit_type_label_id(ctx)
|
2241
|
+
ctx__SimpleId = ctx.SimpleId
|
2242
|
+
|
2243
|
+
handle_simple_id(ctx__SimpleId)
|
1958
2244
|
end
|
1959
2245
|
|
1960
|
-
def
|
1961
|
-
|
2246
|
+
def visit_unary_op(ctx)
|
2247
|
+
ctx__text = ctx.text
|
2248
|
+
ctx__PLUS = ctx__text == '+'
|
2249
|
+
ctx__MINUS = ctx__text == '-'
|
2250
|
+
ctx__NOT = ctx.NOT
|
2251
|
+
|
2252
|
+
if ctx__PLUS
|
1962
2253
|
Model::Expressions::UnaryExpression::PLUS
|
1963
|
-
elsif
|
2254
|
+
elsif ctx__MINUS
|
1964
2255
|
Model::Expressions::UnaryExpression::MINUS
|
1965
|
-
elsif
|
2256
|
+
elsif ctx__NOT
|
1966
2257
|
Model::Expressions::UnaryExpression::NOT
|
1967
2258
|
else
|
1968
2259
|
raise 'Invalid state'
|
1969
2260
|
end
|
1970
2261
|
end
|
1971
2262
|
|
1972
|
-
def
|
1973
|
-
|
1974
|
-
|
1975
|
-
|
1976
|
-
|
1977
|
-
else
|
1978
|
-
raise 'Invalid state'
|
1979
|
-
end
|
2263
|
+
def visit_underlying_type(ctx)
|
2264
|
+
ctx__concrete_types = ctx.concrete_types
|
2265
|
+
ctx__constructed_types = ctx.constructed_types
|
2266
|
+
|
2267
|
+
visit_if(ctx__concrete_types || ctx__constructed_types)
|
1980
2268
|
end
|
1981
2269
|
|
1982
|
-
def
|
1983
|
-
|
2270
|
+
def visit_unique_clause(ctx)
|
2271
|
+
ctx__unique_rule = ctx.unique_rule
|
2272
|
+
|
2273
|
+
visit_if_map(ctx__unique_rule)
|
1984
2274
|
end
|
1985
2275
|
|
1986
|
-
def
|
1987
|
-
|
1988
|
-
|
1989
|
-
|
1990
|
-
|
2276
|
+
def visit_unique_rule(ctx)
|
2277
|
+
ctx__rule_label_id = ctx.rule_label_id
|
2278
|
+
ctx__referenced_attribute = ctx.referenced_attribute
|
2279
|
+
|
2280
|
+
id = visit_if(ctx__rule_label_id)
|
2281
|
+
attributes = visit_if_map(ctx__referenced_attribute)
|
1991
2282
|
|
1992
2283
|
Model::Unique.new({
|
1993
2284
|
id: id,
|
@@ -1995,13 +2286,18 @@ module Expressir
|
|
1995
2286
|
})
|
1996
2287
|
end
|
1997
2288
|
|
1998
|
-
def
|
1999
|
-
|
2289
|
+
def visit_until_control(ctx)
|
2290
|
+
ctx__logical_expression = ctx.logical_expression
|
2291
|
+
|
2292
|
+
visit_if(ctx__logical_expression)
|
2000
2293
|
end
|
2001
2294
|
|
2002
|
-
def
|
2003
|
-
|
2004
|
-
|
2295
|
+
def visit_use_clause(ctx)
|
2296
|
+
ctx__schema_ref = ctx.schema_ref
|
2297
|
+
ctx__named_type_or_rename = ctx.named_type_or_rename
|
2298
|
+
|
2299
|
+
schema = visit_if(ctx__schema_ref)
|
2300
|
+
items = visit_if_map(ctx__named_type_or_rename)
|
2005
2301
|
|
2006
2302
|
Model::Interface.new({
|
2007
2303
|
kind: Model::Interface::USE,
|
@@ -2010,37 +2306,37 @@ module Expressir
|
|
2010
2306
|
})
|
2011
2307
|
end
|
2012
2308
|
|
2013
|
-
def
|
2014
|
-
|
2309
|
+
def visit_variable_id(ctx)
|
2310
|
+
ctx__SimpleId = ctx.SimpleId
|
2311
|
+
|
2312
|
+
handle_simple_id(ctx__SimpleId)
|
2015
2313
|
end
|
2016
2314
|
|
2017
|
-
def
|
2018
|
-
|
2315
|
+
def visit_where_clause(ctx)
|
2316
|
+
ctx__domain_rule = ctx.domain_rule
|
2317
|
+
|
2318
|
+
visit_if_map(ctx__domain_rule)
|
2019
2319
|
end
|
2020
2320
|
|
2021
|
-
def
|
2022
|
-
|
2321
|
+
def visit_while_control(ctx)
|
2322
|
+
ctx__logical_expression = ctx.logical_expression
|
2323
|
+
|
2324
|
+
visit_if(ctx__logical_expression)
|
2023
2325
|
end
|
2024
2326
|
|
2025
|
-
def
|
2026
|
-
|
2327
|
+
def visit_width(ctx)
|
2328
|
+
ctx__numeric_expression = ctx.numeric_expression
|
2329
|
+
|
2330
|
+
visit_if(ctx__numeric_expression)
|
2027
2331
|
end
|
2028
2332
|
|
2029
|
-
def
|
2333
|
+
def visit_width_spec(ctx)
|
2030
2334
|
raise 'Invalid state'
|
2031
2335
|
end
|
2032
2336
|
|
2033
2337
|
private
|
2034
2338
|
|
2035
|
-
def
|
2036
|
-
id = handleSimpleId(ctx.SimpleId())
|
2037
|
-
|
2038
|
-
Model::EnumerationItem.new({
|
2039
|
-
id: id
|
2040
|
-
})
|
2041
|
-
end
|
2042
|
-
|
2043
|
-
def handleBinaryExpression(operands, operators)
|
2339
|
+
def handle_binary_expression(operands, operators)
|
2044
2340
|
if operands.length != operators.length + 1
|
2045
2341
|
raise 'Invalid state'
|
2046
2342
|
end
|
@@ -2060,32 +2356,33 @@ module Expressir
|
|
2060
2356
|
expression
|
2061
2357
|
end
|
2062
2358
|
|
2063
|
-
def
|
2359
|
+
def handle_qualified_ref(ref, qualifiers)
|
2064
2360
|
qualifiers.reduce(ref) do |ref, ctx|
|
2065
|
-
|
2066
|
-
|
2361
|
+
ctx__attribute_qualifier = ctx.attribute_qualifier
|
2362
|
+
ctx__group_qualifier = ctx.group_qualifier
|
2363
|
+
ctx__index_qualifier = ctx.index_qualifier
|
2364
|
+
|
2365
|
+
if ctx__attribute_qualifier
|
2366
|
+
attribute_reference = visit_if(ctx__attribute_qualifier)
|
2067
2367
|
|
2068
2368
|
Model::Expressions::AttributeReference.new({
|
2069
2369
|
ref: ref,
|
2070
|
-
attribute: attribute
|
2370
|
+
attribute: attribute_reference.attribute
|
2071
2371
|
})
|
2072
|
-
elsif
|
2073
|
-
|
2372
|
+
elsif ctx__group_qualifier
|
2373
|
+
group_reference = visit_if(ctx__group_qualifier)
|
2074
2374
|
|
2075
2375
|
Model::Expressions::GroupReference.new({
|
2076
2376
|
ref: ref,
|
2077
|
-
entity: entity
|
2377
|
+
entity: group_reference.entity
|
2078
2378
|
})
|
2079
|
-
elsif
|
2080
|
-
|
2081
|
-
index2 = if ctx.indexQualifier().index2()
|
2082
|
-
visit(ctx.indexQualifier().index2().index().numericExpression().simpleExpression())
|
2083
|
-
end
|
2379
|
+
elsif ctx__index_qualifier
|
2380
|
+
index_reference = visit_if(ctx__index_qualifier)
|
2084
2381
|
|
2085
2382
|
Model::Expressions::IndexReference.new({
|
2086
2383
|
ref: ref,
|
2087
|
-
index1: index1,
|
2088
|
-
index2: index2
|
2384
|
+
index1: index_reference.index1,
|
2385
|
+
index2: index_reference.index2
|
2089
2386
|
})
|
2090
2387
|
else
|
2091
2388
|
raise 'Invalid state'
|
@@ -2093,44 +2390,56 @@ module Expressir
|
|
2093
2390
|
end
|
2094
2391
|
end
|
2095
2392
|
|
2096
|
-
def
|
2097
|
-
|
2393
|
+
def handle_binary_literal(ctx)
|
2394
|
+
ctx__text = ctx.text
|
2395
|
+
|
2396
|
+
value = ctx__text[1..(ctx__text.length - 1)]
|
2098
2397
|
|
2099
2398
|
Model::Literals::Binary.new({
|
2100
2399
|
value: value
|
2101
2400
|
})
|
2102
2401
|
end
|
2103
2402
|
|
2104
|
-
def
|
2105
|
-
|
2403
|
+
def handle_integer_literal(ctx)
|
2404
|
+
ctx__text = ctx.text
|
2405
|
+
|
2406
|
+
value = ctx__text
|
2106
2407
|
|
2107
2408
|
Model::Literals::Integer.new({
|
2108
2409
|
value: value
|
2109
2410
|
})
|
2110
2411
|
end
|
2111
2412
|
|
2112
|
-
def
|
2113
|
-
|
2413
|
+
def handle_real_literal(ctx)
|
2414
|
+
ctx__text = ctx.text
|
2415
|
+
|
2416
|
+
value = ctx__text
|
2114
2417
|
|
2115
2418
|
Model::Literals::Real.new({
|
2116
2419
|
value: value
|
2117
2420
|
})
|
2118
2421
|
end
|
2119
2422
|
|
2120
|
-
def
|
2121
|
-
ctx.text
|
2423
|
+
def handle_simple_id(ctx)
|
2424
|
+
ctx__text = ctx.text
|
2425
|
+
|
2426
|
+
ctx__text
|
2122
2427
|
end
|
2123
2428
|
|
2124
|
-
def
|
2125
|
-
|
2429
|
+
def handle_simple_string_literal(ctx)
|
2430
|
+
ctx__text = ctx.text
|
2431
|
+
|
2432
|
+
value = ctx__text[1..(ctx__text.length - 2)]
|
2126
2433
|
|
2127
2434
|
Model::Literals::String.new({
|
2128
2435
|
value: value
|
2129
2436
|
})
|
2130
2437
|
end
|
2131
2438
|
|
2132
|
-
def
|
2133
|
-
|
2439
|
+
def handle_encoded_string_literal(ctx)
|
2440
|
+
ctx__text = ctx.text
|
2441
|
+
|
2442
|
+
value = ctx__text[1..(ctx__text.length - 2)]
|
2134
2443
|
|
2135
2444
|
Model::Literals::String.new({
|
2136
2445
|
value: value,
|