expressir 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|