expressir 0.2.0 → 0.2.1
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/demo.rb +3 -1
- data/expressir.gemspec +1 -1
- data/lib/expressir/express.rb +0 -1
- data/lib/expressir/express_exp/generated/ExpressLexer.rb +235 -232
- data/lib/expressir/express_exp/generated/ExpressParser.rb +1461 -1435
- data/lib/expressir/express_exp/parser.rb +8 -3
- data/lib/expressir/express_exp/visitor.rb +167 -136
- data/lib/expressir/model.rb +91 -0
- data/lib/expressir/model/constant.rb +2 -0
- data/lib/expressir/model/derived.rb +4 -0
- data/lib/expressir/model/entity.rb +12 -0
- data/lib/expressir/model/enumeration_item.rb +13 -0
- data/lib/expressir/model/explicit.rb +4 -0
- data/lib/expressir/model/expressions/aggregate_initializer.rb +13 -0
- data/lib/expressir/model/expressions/query.rb +8 -0
- data/lib/expressir/model/function.rb +31 -0
- data/lib/expressir/model/inverse.rb +4 -0
- data/lib/expressir/model/literals/binary.rb +13 -0
- data/lib/expressir/model/literals/integer.rb +13 -0
- data/lib/expressir/model/literals/logical.rb +13 -0
- data/lib/expressir/model/literals/real.rb +13 -0
- data/lib/expressir/model/literals/string.rb +15 -0
- data/lib/expressir/model/local.rb +2 -0
- data/lib/expressir/model/parameter.rb +2 -0
- data/lib/expressir/model/procedure.rb +31 -0
- data/lib/expressir/model/repository.rb +6 -0
- data/lib/expressir/model/rule.rb +31 -0
- data/lib/expressir/model/schema.rb +10 -0
- data/lib/expressir/model/statements/alias.rb +8 -0
- data/lib/expressir/model/statements/case_action.rb +2 -2
- data/lib/expressir/model/statements/if.rb +2 -2
- data/lib/expressir/model/statements/repeat.rb +10 -2
- data/lib/expressir/model/subtype_constraint.rb +2 -0
- data/lib/expressir/model/type.rb +8 -0
- data/lib/expressir/model/types/aggregate.rb +2 -0
- data/lib/expressir/model/types/enumeration.rb +4 -4
- data/lib/expressir/model/types/generic.rb +2 -0
- data/lib/expressir/model/types/generic_entity.rb +2 -0
- data/lib/expressir/model/types/select.rb +4 -4
- data/lib/expressir/model/unique.rb +2 -0
- data/lib/expressir/model/where.rb +2 -0
- data/lib/expressir/version.rb +1 -1
- data/original/examples/syntax/remark.exp +127 -0
- data/original/examples/syntax/syntax.exp +15 -10
- data/spec/expressir/express_exp/remark_spec.rb +301 -0
- data/spec/expressir/express_exp/syntax_spec.rb +659 -307
- metadata +15 -6
- data/lib/expressir/model/expressions/unknown.rb +0 -8
@@ -14,11 +14,16 @@ module Expressir
|
|
14
14
|
lexer = Generated::ExpressLexer.new(char_stream)
|
15
15
|
token_stream = Antlr4::Runtime::CommonTokenStream.new(lexer)
|
16
16
|
parser = Generated::ExpressParser.new(token_stream)
|
17
|
-
|
17
|
+
|
18
|
+
# don't attempt to recover from any parsing error
|
19
|
+
parser.instance_variable_set(:@_err_handler, Antlr4::Runtime::BailErrorStrategy.new)
|
20
|
+
|
18
21
|
parse_tree = parser.syntax()
|
19
22
|
|
20
|
-
visitor = Visitor.new()
|
21
|
-
visitor.visit(parse_tree)
|
23
|
+
visitor = Visitor.new(token_stream)
|
24
|
+
repo = visitor.visit(parse_tree)
|
25
|
+
|
26
|
+
repo
|
22
27
|
end
|
23
28
|
end
|
24
29
|
end
|
@@ -1,89 +1,5 @@
|
|
1
1
|
require 'expressir/express_exp/generated/ExpressBaseVisitor'
|
2
|
-
require 'expressir/model
|
3
|
-
require 'expressir/model/derived'
|
4
|
-
require 'expressir/model/entity'
|
5
|
-
require 'expressir/model/explicit'
|
6
|
-
require 'expressir/model/function'
|
7
|
-
require 'expressir/model/inverse'
|
8
|
-
require 'expressir/model/local'
|
9
|
-
require 'expressir/model/parameter'
|
10
|
-
require 'expressir/model/procedure'
|
11
|
-
require 'expressir/model/ref'
|
12
|
-
require 'expressir/model/reference'
|
13
|
-
require 'expressir/model/renamed_ref'
|
14
|
-
require 'expressir/model/repository'
|
15
|
-
require 'expressir/model/rule'
|
16
|
-
require 'expressir/model/schema'
|
17
|
-
require 'expressir/model/subtype_constraint'
|
18
|
-
require 'expressir/model/type'
|
19
|
-
require 'expressir/model/unique'
|
20
|
-
require 'expressir/model/use'
|
21
|
-
require 'expressir/model/where'
|
22
|
-
require 'expressir/model/expressions/aggregate_element'
|
23
|
-
require 'expressir/model/expressions/attribute_qualifier'
|
24
|
-
require 'expressir/model/expressions/entity_constructor'
|
25
|
-
require 'expressir/model/expressions/expression'
|
26
|
-
require 'expressir/model/expressions/function_call'
|
27
|
-
require 'expressir/model/expressions/group_qualifier'
|
28
|
-
require 'expressir/model/expressions/index_qualifier'
|
29
|
-
require 'expressir/model/expressions/interval'
|
30
|
-
require 'expressir/model/expressions/qualified_ref'
|
31
|
-
require 'expressir/model/expressions/query'
|
32
|
-
require 'expressir/model/expressions/unknown'
|
33
|
-
require 'expressir/model/operators/addition'
|
34
|
-
require 'expressir/model/operators/and'
|
35
|
-
require 'expressir/model/operators/andor'
|
36
|
-
require 'expressir/model/operators/combine'
|
37
|
-
require 'expressir/model/operators/equal'
|
38
|
-
require 'expressir/model/operators/exponentiation'
|
39
|
-
require 'expressir/model/operators/greater_than'
|
40
|
-
require 'expressir/model/operators/greater_than_or_equal'
|
41
|
-
require 'expressir/model/operators/in'
|
42
|
-
require 'expressir/model/operators/instance_equal'
|
43
|
-
require 'expressir/model/operators/instance_not_equal'
|
44
|
-
require 'expressir/model/operators/integer_division'
|
45
|
-
require 'expressir/model/operators/less_than'
|
46
|
-
require 'expressir/model/operators/less_than_or_equal'
|
47
|
-
require 'expressir/model/operators/like'
|
48
|
-
require 'expressir/model/operators/modulo'
|
49
|
-
require 'expressir/model/operators/multiplication'
|
50
|
-
require 'expressir/model/operators/not'
|
51
|
-
require 'expressir/model/operators/not_equal'
|
52
|
-
require 'expressir/model/operators/oneof'
|
53
|
-
require 'expressir/model/operators/or'
|
54
|
-
require 'expressir/model/operators/real_division'
|
55
|
-
require 'expressir/model/operators/subtraction'
|
56
|
-
require 'expressir/model/operators/unary_plus'
|
57
|
-
require 'expressir/model/operators/unary_minus'
|
58
|
-
require 'expressir/model/operators/xor'
|
59
|
-
require 'expressir/model/statements/alias'
|
60
|
-
require 'expressir/model/statements/assignment'
|
61
|
-
require 'expressir/model/statements/case'
|
62
|
-
require 'expressir/model/statements/case_action'
|
63
|
-
require 'expressir/model/statements/compound'
|
64
|
-
require 'expressir/model/statements/escape'
|
65
|
-
require 'expressir/model/statements/if'
|
66
|
-
require 'expressir/model/statements/null'
|
67
|
-
require 'expressir/model/statements/procedure_call'
|
68
|
-
require 'expressir/model/statements/repeat'
|
69
|
-
require 'expressir/model/statements/return'
|
70
|
-
require 'expressir/model/statements/skip'
|
71
|
-
require 'expressir/model/types/aggregate'
|
72
|
-
require 'expressir/model/types/array'
|
73
|
-
require 'expressir/model/types/bag'
|
74
|
-
require 'expressir/model/types/binary'
|
75
|
-
require 'expressir/model/types/boolean'
|
76
|
-
require 'expressir/model/types/enumeration'
|
77
|
-
require 'expressir/model/types/generic_entity'
|
78
|
-
require 'expressir/model/types/generic'
|
79
|
-
require 'expressir/model/types/integer'
|
80
|
-
require 'expressir/model/types/list'
|
81
|
-
require 'expressir/model/types/logical'
|
82
|
-
require 'expressir/model/types/number'
|
83
|
-
require 'expressir/model/types/real'
|
84
|
-
require 'expressir/model/types/set'
|
85
|
-
require 'expressir/model/types/select'
|
86
|
-
require 'expressir/model/types/string'
|
2
|
+
require 'expressir/model'
|
87
3
|
|
88
4
|
# issues:
|
89
5
|
#
|
@@ -107,6 +23,77 @@ require 'expressir/model/types/string'
|
|
107
23
|
module Expressir
|
108
24
|
module ExpressExp
|
109
25
|
class Visitor < Generated::ExpressBaseVisitor
|
26
|
+
REMARK_CHANNEL = 2
|
27
|
+
|
28
|
+
def initialize(tokens)
|
29
|
+
@tokens = tokens
|
30
|
+
@attached_remarks = Set.new
|
31
|
+
end
|
32
|
+
|
33
|
+
def visit(ctx)
|
34
|
+
result = super(ctx)
|
35
|
+
attach_remarks(ctx, result)
|
36
|
+
result
|
37
|
+
end
|
38
|
+
|
39
|
+
def attach_remarks(ctx, item)
|
40
|
+
# get remark tokens
|
41
|
+
start_index, stop_index = if ctx.instance_of? Generated::ExpressParser::SyntaxContext
|
42
|
+
[0, @tokens.size - 1]
|
43
|
+
else
|
44
|
+
[ctx.start.token_index, ctx.stop.token_index]
|
45
|
+
end
|
46
|
+
# puts [start_index, stop_index, ctx.class].inspect
|
47
|
+
|
48
|
+
remark_tokens = @tokens.filter_for_channel(start_index, stop_index, REMARK_CHANNEL)
|
49
|
+
if remark_tokens
|
50
|
+
remark_tokens.each do |remark_token|
|
51
|
+
remark_text = remark_token.text
|
52
|
+
|
53
|
+
# check if it is tagged remark
|
54
|
+
match = if remark_text.start_with?('--')
|
55
|
+
remark_text[2..-1].match(/^"([^"]*)"(.*)$/)
|
56
|
+
elsif remark_text.start_with?('(*') and remark_text.end_with?('*)')
|
57
|
+
remark_text[2..-3].match(/^"([^"]*)"(.*)$/m)
|
58
|
+
end
|
59
|
+
if !match
|
60
|
+
next
|
61
|
+
end
|
62
|
+
|
63
|
+
# don't attach already attached tagged remark
|
64
|
+
if @attached_remarks.include? remark_token
|
65
|
+
next
|
66
|
+
end
|
67
|
+
|
68
|
+
# attach tagged remark
|
69
|
+
remark_tag = match[1]
|
70
|
+
remark_content = match[2].strip
|
71
|
+
|
72
|
+
current_item = item
|
73
|
+
remark_tag.split('.').each do |id|
|
74
|
+
if current_item
|
75
|
+
if current_item.class.method_defined? :scope_items
|
76
|
+
current_item = current_item.scope_items.find{|x| x.id == id}
|
77
|
+
else
|
78
|
+
current_item = nil
|
79
|
+
break
|
80
|
+
end
|
81
|
+
else
|
82
|
+
break
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
if current_item
|
87
|
+
current_item.remarks ||= []
|
88
|
+
current_item.remarks << remark_content
|
89
|
+
|
90
|
+
# mark remark as attached, so that it is not attached again at higher nesting level
|
91
|
+
@attached_remarks << remark_token
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
110
97
|
def visitAttributeRef(ctx)
|
111
98
|
id = visit(ctx.attributeId())
|
112
99
|
|
@@ -250,7 +237,11 @@ module Expressir
|
|
250
237
|
end
|
251
238
|
|
252
239
|
def visitAggregateInitializer(ctx)
|
253
|
-
ctx.element().map{|ctx| visit(ctx)}
|
240
|
+
items = ctx.element().map{|ctx| visit(ctx)}
|
241
|
+
|
242
|
+
Model::Expressions::AggregateInitializer.new({
|
243
|
+
items: items
|
244
|
+
})
|
254
245
|
end
|
255
246
|
|
256
247
|
def visitAggregateSource(ctx)
|
@@ -347,13 +338,7 @@ module Expressir
|
|
347
338
|
end
|
348
339
|
|
349
340
|
def visitAttributeDecl(ctx)
|
350
|
-
|
351
|
-
visit(ctx.attributeId())
|
352
|
-
elsif ctx.redeclaredAttribute()
|
353
|
-
visit(ctx.redeclaredAttribute())
|
354
|
-
else
|
355
|
-
raise 'Invalid state'
|
356
|
-
end
|
341
|
+
raise 'Invalid state'
|
357
342
|
end
|
358
343
|
|
359
344
|
def visitAttributeId(ctx)
|
@@ -439,12 +424,12 @@ module Expressir
|
|
439
424
|
end
|
440
425
|
|
441
426
|
def visitCaseAction(ctx)
|
442
|
-
|
427
|
+
expressions = ctx.caseLabel().map{|ctx| visit(ctx.expression())}
|
443
428
|
statement = visit(ctx.stmt())
|
444
429
|
|
445
|
-
|
430
|
+
expressions.map do |expression|
|
446
431
|
Model::Statements::CaseAction.new({
|
447
|
-
|
432
|
+
expression: expression,
|
448
433
|
statement: statement
|
449
434
|
})
|
450
435
|
end
|
@@ -545,12 +530,20 @@ module Expressir
|
|
545
530
|
end
|
546
531
|
|
547
532
|
def visitDerivedAttr(ctx)
|
548
|
-
id =
|
533
|
+
id = if ctx.attributeDecl().attributeId()
|
534
|
+
visit(ctx.attributeDecl().attributeId())
|
535
|
+
elsif ctx.attributeDecl().redeclaredAttribute() && ctx.attributeDecl().redeclaredAttribute().attributeId()
|
536
|
+
visit(ctx.attributeDecl().redeclaredAttribute().attributeId())
|
537
|
+
end
|
538
|
+
supertype_attribute = if ctx.attributeDecl().redeclaredAttribute() && ctx.attributeDecl().redeclaredAttribute().qualifiedAttribute()
|
539
|
+
visit(ctx.attributeDecl().redeclaredAttribute().qualifiedAttribute())
|
540
|
+
end
|
549
541
|
type = visit(ctx.parameterType())
|
550
542
|
expression = visit(ctx.expression())
|
551
543
|
|
552
544
|
Model::Derived.new({
|
553
545
|
id: id,
|
546
|
+
supertype_attribute: supertype_attribute,
|
554
547
|
type: type,
|
555
548
|
expression: expression
|
556
549
|
})
|
@@ -684,21 +677,21 @@ module Expressir
|
|
684
677
|
|
685
678
|
def visitEnumerationType(ctx)
|
686
679
|
extensible = !!ctx.EXTENSIBLE()
|
687
|
-
|
688
|
-
ctx.enumerationItems().enumerationId().map{|ctx|
|
680
|
+
items = if ctx.enumerationItems()
|
681
|
+
ctx.enumerationItems().enumerationId().map{|ctx| handleEnumerationItem(ctx)}
|
689
682
|
end
|
690
683
|
extension_type = if ctx.enumerationExtension()
|
691
684
|
visit(ctx.enumerationExtension().typeRef())
|
692
685
|
end
|
693
|
-
|
694
|
-
ctx.enumerationExtension().enumerationItems().enumerationId().map{|ctx|
|
686
|
+
extension_items = if ctx.enumerationExtension() && ctx.enumerationExtension().enumerationItems()
|
687
|
+
ctx.enumerationExtension().enumerationItems().enumerationId().map{|ctx| handleEnumerationItem(ctx)}
|
695
688
|
end
|
696
689
|
|
697
690
|
Model::Types::Enumeration.new({
|
698
691
|
extensible: extensible,
|
699
|
-
|
692
|
+
items: items,
|
700
693
|
extension_type: extension_type,
|
701
|
-
|
694
|
+
extension_items: extension_items
|
702
695
|
})
|
703
696
|
end
|
704
697
|
|
@@ -707,13 +700,22 @@ module Expressir
|
|
707
700
|
end
|
708
701
|
|
709
702
|
def visitExplicitAttr(ctx)
|
710
|
-
|
703
|
+
decls = ctx.attributeDecl()
|
711
704
|
optional = !!ctx.OPTIONAL()
|
712
705
|
type = visit(ctx.parameterType())
|
713
706
|
|
714
|
-
|
707
|
+
decls.map do |decl|
|
708
|
+
id = if decl.attributeId()
|
709
|
+
visit(decl.attributeId())
|
710
|
+
elsif decl.redeclaredAttribute() && decl.redeclaredAttribute().attributeId()
|
711
|
+
visit(decl.redeclaredAttribute().attributeId())
|
712
|
+
end
|
713
|
+
supertype_attribute = if decl.redeclaredAttribute() && decl.redeclaredAttribute().qualifiedAttribute()
|
714
|
+
visit(decl.redeclaredAttribute().qualifiedAttribute())
|
715
|
+
end
|
715
716
|
Model::Explicit.new({
|
716
717
|
id: id,
|
718
|
+
supertype_attribute: supertype_attribute,
|
717
719
|
optional: optional,
|
718
720
|
type: type
|
719
721
|
})
|
@@ -948,7 +950,7 @@ module Expressir
|
|
948
950
|
end
|
949
951
|
|
950
952
|
def visitIfStmt(ctx)
|
951
|
-
|
953
|
+
expression = visit(ctx.logicalExpression().expression())
|
952
954
|
else_index = if ctx.ELSE()
|
953
955
|
ctx.children.find_index{|x| x == ctx.ELSE()}
|
954
956
|
end
|
@@ -965,7 +967,7 @@ module Expressir
|
|
965
967
|
end
|
966
968
|
|
967
969
|
Model::Statements::If.new({
|
968
|
-
|
970
|
+
expression: expression,
|
969
971
|
statements: statements,
|
970
972
|
else_statements: else_statements
|
971
973
|
})
|
@@ -1066,7 +1068,14 @@ module Expressir
|
|
1066
1068
|
end
|
1067
1069
|
|
1068
1070
|
def visitInverseAttr(ctx)
|
1069
|
-
id =
|
1071
|
+
id = if ctx.attributeDecl().attributeId()
|
1072
|
+
visit(ctx.attributeDecl().attributeId())
|
1073
|
+
elsif ctx.attributeDecl().redeclaredAttribute() && ctx.attributeDecl().redeclaredAttribute().attributeId()
|
1074
|
+
visit(ctx.attributeDecl().redeclaredAttribute().attributeId())
|
1075
|
+
end
|
1076
|
+
supertype_attribute = if ctx.attributeDecl().redeclaredAttribute() && ctx.attributeDecl().redeclaredAttribute().qualifiedAttribute()
|
1077
|
+
visit(ctx.attributeDecl().redeclaredAttribute().qualifiedAttribute())
|
1078
|
+
end
|
1070
1079
|
type = if ctx.SET()
|
1071
1080
|
bound1, bound2 = if ctx.boundSpec()
|
1072
1081
|
[
|
@@ -1116,6 +1125,7 @@ module Expressir
|
|
1116
1125
|
|
1117
1126
|
Model::Inverse.new({
|
1118
1127
|
id: id,
|
1128
|
+
supertype_attribute: supertype_attribute,
|
1119
1129
|
type: type,
|
1120
1130
|
attribute: attribute
|
1121
1131
|
})
|
@@ -1184,15 +1194,19 @@ module Expressir
|
|
1184
1194
|
end
|
1185
1195
|
|
1186
1196
|
def visitLogicalLiteral(ctx)
|
1187
|
-
if ctx.TRUE()
|
1197
|
+
value = if ctx.TRUE()
|
1188
1198
|
true
|
1189
1199
|
elsif ctx.FALSE()
|
1190
1200
|
false
|
1191
1201
|
elsif ctx.UNKNOWN()
|
1192
|
-
|
1202
|
+
nil
|
1193
1203
|
else
|
1194
1204
|
raise 'Invalid state'
|
1195
1205
|
end
|
1206
|
+
|
1207
|
+
Model::Literals::Logical.new({
|
1208
|
+
value: value
|
1209
|
+
})
|
1196
1210
|
end
|
1197
1211
|
|
1198
1212
|
def visitLogicalType(ctx)
|
@@ -1436,17 +1450,7 @@ module Expressir
|
|
1436
1450
|
end
|
1437
1451
|
|
1438
1452
|
def visitRedeclaredAttribute(ctx)
|
1439
|
-
|
1440
|
-
ref = visit(ctx.qualifiedAttribute())
|
1441
|
-
id = visit(ctx.attributeId())
|
1442
|
-
|
1443
|
-
Model::RenamedRef.new({
|
1444
|
-
ref: ref,
|
1445
|
-
id: id
|
1446
|
-
})
|
1447
|
-
else
|
1448
|
-
visit(ctx.qualifiedAttribute())
|
1449
|
-
end
|
1453
|
+
raise 'Invalid state'
|
1450
1454
|
end
|
1451
1455
|
|
1452
1456
|
def visitReferencedAttribute(ctx)
|
@@ -1524,7 +1528,7 @@ module Expressir
|
|
1524
1528
|
end
|
1525
1529
|
|
1526
1530
|
def visitRepeatStmt(ctx)
|
1527
|
-
|
1531
|
+
id = if ctx.repeatControl().incrementControl()
|
1528
1532
|
visit(ctx.repeatControl().incrementControl().variableId())
|
1529
1533
|
end
|
1530
1534
|
bound1, bound2 = if ctx.repeatControl().incrementControl()
|
@@ -1545,7 +1549,7 @@ module Expressir
|
|
1545
1549
|
statements = ctx.stmt().map{|ctx| visit(ctx)}
|
1546
1550
|
|
1547
1551
|
Model::Statements::Repeat.new({
|
1548
|
-
|
1552
|
+
id: id,
|
1549
1553
|
bound1: bound1,
|
1550
1554
|
bound2: bound2,
|
1551
1555
|
increment: increment,
|
@@ -1682,22 +1686,22 @@ module Expressir
|
|
1682
1686
|
def visitSelectType(ctx)
|
1683
1687
|
extensible = !!ctx.EXTENSIBLE()
|
1684
1688
|
generic_entity = !!ctx.GENERIC_ENTITY()
|
1685
|
-
|
1689
|
+
items = if ctx.selectList()
|
1686
1690
|
ctx.selectList().namedTypes().map{|ctx| visit(ctx)}
|
1687
1691
|
end
|
1688
1692
|
extension_type = if ctx.selectExtension()
|
1689
1693
|
visit(ctx.selectExtension().typeRef())
|
1690
1694
|
end
|
1691
|
-
|
1695
|
+
extension_items = if ctx.selectExtension() && ctx.selectExtension().selectList()
|
1692
1696
|
ctx.selectExtension().selectList().namedTypes().map{|ctx| visit(ctx)}
|
1693
1697
|
end
|
1694
1698
|
|
1695
1699
|
Model::Types::Select.new({
|
1696
1700
|
extensible: extensible,
|
1697
1701
|
generic_entity: generic_entity,
|
1698
|
-
|
1702
|
+
items: items,
|
1699
1703
|
extension_type: extension_type,
|
1700
|
-
|
1704
|
+
extension_items: extension_items
|
1701
1705
|
})
|
1702
1706
|
end
|
1703
1707
|
|
@@ -2053,6 +2057,16 @@ module Expressir
|
|
2053
2057
|
raise 'Invalid state'
|
2054
2058
|
end
|
2055
2059
|
|
2060
|
+
private
|
2061
|
+
|
2062
|
+
def handleEnumerationItem(ctx)
|
2063
|
+
id = handleSimpleId(ctx.SimpleId())
|
2064
|
+
|
2065
|
+
Model::EnumerationItem.new({
|
2066
|
+
id: id
|
2067
|
+
})
|
2068
|
+
end
|
2069
|
+
|
2056
2070
|
def handleBinaryExpression(operands, operators)
|
2057
2071
|
if operands.length != operators.length + 1
|
2058
2072
|
raise 'Invalid state'
|
@@ -2072,16 +2086,27 @@ module Expressir
|
|
2072
2086
|
end
|
2073
2087
|
|
2074
2088
|
def handleBinaryLiteral(ctx)
|
2075
|
-
|
2076
|
-
|
2089
|
+
value = ctx.text[1..(ctx.text.length - 1)]
|
2090
|
+
|
2091
|
+
Model::Literals::Binary.new({
|
2092
|
+
value: value
|
2093
|
+
})
|
2077
2094
|
end
|
2078
2095
|
|
2079
2096
|
def handleIntegerLiteral(ctx)
|
2080
|
-
ctx.text
|
2097
|
+
value = ctx.text
|
2098
|
+
|
2099
|
+
Model::Literals::Integer.new({
|
2100
|
+
value: value
|
2101
|
+
})
|
2081
2102
|
end
|
2082
2103
|
|
2083
2104
|
def handleRealLiteral(ctx)
|
2084
|
-
ctx.text
|
2105
|
+
value = ctx.text
|
2106
|
+
|
2107
|
+
Model::Literals::Real.new({
|
2108
|
+
value: value
|
2109
|
+
})
|
2085
2110
|
end
|
2086
2111
|
|
2087
2112
|
def handleSimpleId(ctx)
|
@@ -2089,14 +2114,20 @@ module Expressir
|
|
2089
2114
|
end
|
2090
2115
|
|
2091
2116
|
def handleSimpleStringLiteral(ctx)
|
2092
|
-
ctx.text[1..(ctx.text.length - 2)]
|
2117
|
+
value = ctx.text[1..(ctx.text.length - 2)]
|
2118
|
+
|
2119
|
+
Model::Literals::String.new({
|
2120
|
+
value: value
|
2121
|
+
})
|
2093
2122
|
end
|
2094
2123
|
|
2095
2124
|
def handleEncodedStringLiteral(ctx)
|
2096
|
-
|
2097
|
-
|
2098
|
-
|
2099
|
-
|
2125
|
+
value = ctx.text[1..(ctx.text.length - 2)]
|
2126
|
+
|
2127
|
+
Model::Literals::String.new({
|
2128
|
+
value: value,
|
2129
|
+
encoded: true
|
2130
|
+
})
|
2100
2131
|
end
|
2101
2132
|
end
|
2102
2133
|
end
|