jievro-parser 0.8.0 → 0.9.0
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/Gemfile.lock +3 -3
- data/Rakefile +1 -1
- data/jievro-parser.gemspec +1 -1
- data/lib/jievro/parser/binary_operator.rb +27 -38
- data/lib/jievro/parser/grammar/code_block.treetop +1 -1
- data/lib/jievro/parser/grammar/declaration/constant_declaration.treetop +2 -8
- data/lib/jievro/parser/grammar/declaration/declaration.treetop +47 -5
- data/lib/jievro/parser/grammar/declaration/function_declaration.treetop +26 -105
- data/lib/jievro/parser/grammar/declaration/initializer_declaration.treetop +16 -0
- data/lib/jievro/parser/grammar/declaration/protocol_declaration.treetop +164 -0
- data/lib/jievro/parser/grammar/declaration/struct_declaration.treetop +49 -0
- data/lib/jievro/parser/grammar/declaration/typealias_declaration.treetop +64 -0
- data/lib/jievro/parser/grammar/declaration/variable_declaration.treetop +113 -9
- data/lib/jievro/parser/grammar/expression/binary_expression.treetop +5 -22
- data/lib/jievro/parser/grammar/expression/closure_expression.treetop +28 -86
- data/lib/jievro/parser/grammar/expression/expression.treetop +13 -13
- data/lib/jievro/parser/grammar/expression/function_call_expression.treetop +2 -6
- data/lib/jievro/parser/grammar/expression/literal_expression.treetop +1 -1
- data/lib/jievro/parser/grammar/expression/parenthesized_expression.treetop +15 -54
- data/lib/jievro/parser/grammar/expression/postfix_expression.treetop +1 -1
- data/lib/jievro/parser/grammar/expression/prefix_expression.treetop +1 -1
- data/lib/jievro/parser/grammar/expression/primary_expression.treetop +1 -1
- data/lib/jievro/parser/grammar/expression/range_expression.treetop +4 -18
- data/lib/jievro/parser/grammar/expression/self_expression.treetop +2 -7
- data/lib/jievro/parser/grammar/expression/super_expression.treetop +2 -7
- data/lib/jievro/parser/grammar/expression/wildcard_expression.treetop +1 -1
- data/lib/jievro/parser/grammar/generics/generic_argument_clause.treetop +8 -34
- data/lib/jievro/parser/grammar/generics/generics.treetop +2 -2
- data/lib/jievro/parser/grammar/grammar.treetop +35 -28
- data/lib/jievro/parser/grammar/identifier.treetop +2 -2
- data/lib/jievro/parser/grammar/implicit_parameter_name.treetop +1 -1
- data/lib/jievro/parser/grammar/literal/literal.treetop +25 -24
- data/lib/jievro/parser/grammar/literal/literal_array.treetop +12 -40
- data/lib/jievro/parser/grammar/literal/literal_boolean.treetop +5 -13
- data/lib/jievro/parser/grammar/literal/literal_decimal_floating_point.treetop +3 -9
- data/lib/jievro/parser/grammar/literal/literal_dictionary.treetop +18 -57
- data/lib/jievro/parser/grammar/literal/literal_hexadecimal_floating_point.treetop +3 -9
- data/lib/jievro/parser/grammar/literal/literal_integer_binary.treetop +3 -9
- data/lib/jievro/parser/grammar/literal/literal_integer_decimal.treetop +3 -9
- data/lib/jievro/parser/grammar/literal/literal_integer_hexadecimal.treetop +3 -9
- data/lib/jievro/parser/grammar/literal/literal_integer_octal.treetop +3 -9
- data/lib/jievro/parser/grammar/literal/literal_nil.treetop +2 -7
- data/lib/jievro/parser/grammar/literal/literal_numeric.treetop +11 -18
- data/lib/jievro/parser/grammar/literal/literal_string.treetop +14 -46
- data/lib/jievro/parser/grammar/operator.treetop +1 -1
- data/lib/jievro/parser/grammar/pattern/pattern.treetop +4 -4
- data/lib/jievro/parser/grammar/pattern/pattern_identifier.treetop +1 -1
- data/lib/jievro/parser/grammar/pattern/pattern_initializer.treetop +18 -70
- data/lib/jievro/parser/grammar/pattern/pattern_wildcard.treetop +1 -1
- data/lib/jievro/parser/grammar/statement/branch/branch.treetop +2 -2
- data/lib/jievro/parser/grammar/statement/branch/if.treetop +1 -1
- data/lib/jievro/parser/grammar/statement/loop/do_while.treetop +1 -1
- data/lib/jievro/parser/grammar/statement/loop/for.treetop +1 -1
- data/lib/jievro/parser/grammar/statement/loop/for_in.treetop +1 -1
- data/lib/jievro/parser/grammar/statement/loop/loop.treetop +5 -5
- data/lib/jievro/parser/grammar/statement/loop/while.treetop +1 -1
- data/lib/jievro/parser/grammar/statement/statement.treetop +3 -3
- data/lib/jievro/parser/grammar/type/type.treetop +7 -5
- data/lib/jievro/parser/grammar/type/type_annotation.treetop +1 -1
- data/lib/jievro/parser/grammar/type/type_array.treetop +1 -1
- data/lib/jievro/parser/grammar/type/type_dictionary.treetop +1 -1
- data/lib/jievro/parser/grammar/type/type_identifier.treetop +7 -14
- data/lib/jievro/parser/grammar/type/type_inheritance_clause.treetop +57 -0
- data/lib/jievro/parser/grammar/whitespace.treetop +1 -1
- data/lib/jievro/parser/grammar/wildcard.treetop +1 -1
- data/lib/jievro/parser/string_parser.rb +2 -7
- data/lib/jievro/parser/tools/converter/binary_string_to_int_converter.rb +6 -7
- data/lib/jievro/parser/tools/converter/converter.rb +1 -1
- data/lib/jievro/parser/tools/converter/decimal_float_string_to_float_converter.rb +5 -6
- data/lib/jievro/parser/tools/converter/decimal_string_to_int_converter.rb +5 -6
- data/lib/jievro/parser/tools/converter/hexadecimal_float_string_to_float_converter.rb +9 -14
- data/lib/jievro/parser/tools/converter/hexadecimal_string_to_int_converter.rb +5 -6
- data/lib/jievro/parser/tools/converter/octal_string_to_int_converter.rb +5 -6
- data/lib/jievro/parser/tools/quote_stripper.rb +1 -2
- data/lib/jievro/parser/tools/shunting_yard.rb +18 -32
- data/lib/jievro/parser/tools/tokens.rb +159 -0
- data/lib/jievro/parser/version.rb +1 -1
- metadata +24 -19
@@ -10,27 +10,27 @@ require 'jievro/parser/grammar/code_block'
|
|
10
10
|
require 'jievro/parser/grammar/pattern/pattern'
|
11
11
|
require 'jievro/parser/grammar/wildcard'
|
12
12
|
require 'jievro/parser/grammar/operator'
|
13
|
-
|
14
13
|
require 'jievro/parser/tools/tokens'
|
15
14
|
|
16
15
|
module Jievro
|
17
16
|
grammar Swift
|
18
17
|
|
19
|
-
include
|
20
|
-
include
|
21
|
-
include
|
22
|
-
include
|
23
|
-
include
|
24
|
-
include
|
25
|
-
include
|
26
|
-
include
|
27
|
-
include
|
28
|
-
include
|
29
|
-
include
|
30
|
-
include
|
18
|
+
include Jievro::Whitespace
|
19
|
+
include Jievro::Literal
|
20
|
+
include Jievro::Identifier
|
21
|
+
include Jievro::Declaration
|
22
|
+
include Jievro::Statement
|
23
|
+
include Jievro::Expression
|
24
|
+
include Jievro::Generics
|
25
|
+
include Jievro::Type
|
26
|
+
include Jievro::CodeBlock
|
27
|
+
include Jievro::Pattern
|
28
|
+
include Jievro::Wildcard
|
29
|
+
include Jievro::Operator
|
31
30
|
|
32
31
|
rule root
|
33
|
-
|
32
|
+
ws1:_
|
33
|
+
program:(
|
34
34
|
declaration:declaration
|
35
35
|
/
|
36
36
|
statement:statement
|
@@ -40,31 +40,38 @@ module Jievro
|
|
40
40
|
identifier:identifier
|
41
41
|
/
|
42
42
|
whitespaces:whitespaces
|
43
|
-
)
|
43
|
+
)*
|
44
|
+
ws2:_
|
45
|
+
{
|
44
46
|
def tokens
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
47
|
+
tokens = []
|
48
|
+
|
49
|
+
tokens.concat(ws1.tokens) unless ws1.text_value.empty?
|
50
|
+
|
51
|
+
unless program.text_value.empty?
|
52
|
+
program.elements.each do |e|
|
53
|
+
tokens.concat(e.elements.first.tokens)
|
54
|
+
end
|
49
55
|
end
|
50
56
|
|
57
|
+
tokens.concat(ws2.tokens) unless ws2.text_value.empty?
|
58
|
+
|
51
59
|
tokens
|
52
60
|
end
|
53
61
|
|
54
62
|
def ast
|
55
63
|
body = []
|
56
64
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
body = e.ast
|
65
|
+
unless program.text_value.empty?
|
66
|
+
program.elements.each do |e|
|
67
|
+
body.concat(e.elements.first.ast)
|
61
68
|
end
|
62
|
-
|
63
|
-
{
|
64
|
-
__type: 'program',
|
65
|
-
body: body
|
66
|
-
}
|
67
69
|
end
|
70
|
+
|
71
|
+
{
|
72
|
+
__type: 'program',
|
73
|
+
body: body
|
74
|
+
}
|
68
75
|
end
|
69
76
|
}
|
70
77
|
end
|
@@ -1,9 +1,9 @@
|
|
1
1
|
require 'jievro/parser/grammar/implicit_parameter_name'
|
2
2
|
|
3
|
-
module
|
3
|
+
module Jievro
|
4
4
|
grammar Identifier
|
5
5
|
|
6
|
-
include
|
6
|
+
include Jievro::ImplicitParameterName
|
7
7
|
|
8
8
|
rule identifier
|
9
9
|
implicit_parameter_name / backticked_identifier / regular_identifier
|
@@ -5,37 +5,38 @@ require 'jievro/parser/grammar/literal/literal_string'
|
|
5
5
|
require 'jievro/parser/grammar/literal/literal_array'
|
6
6
|
require 'jievro/parser/grammar/literal/literal_dictionary'
|
7
7
|
|
8
|
-
module
|
8
|
+
module Jievro
|
9
9
|
grammar Literal
|
10
10
|
|
11
|
-
include
|
12
|
-
include
|
13
|
-
include
|
14
|
-
include
|
15
|
-
include
|
16
|
-
include
|
11
|
+
include Jievro::LiteralNil
|
12
|
+
include Jievro::LiteralBoolean
|
13
|
+
include Jievro::LiteralNumeric
|
14
|
+
include Jievro::LiteralString
|
15
|
+
include Jievro::LiteralArray
|
16
|
+
include Jievro::LiteralDictionary
|
17
17
|
|
18
18
|
rule literal
|
19
|
-
(
|
19
|
+
(
|
20
|
+
literal_nil
|
21
|
+
/
|
22
|
+
literal_boolean
|
23
|
+
/
|
24
|
+
literal_numeric
|
25
|
+
/
|
26
|
+
literal_string
|
27
|
+
/
|
28
|
+
literal_array
|
29
|
+
/
|
30
|
+
literal_dictionary
|
31
|
+
) {
|
20
32
|
def ast
|
33
|
+
return super if defined?(super)
|
34
|
+
return [] if elements.nil?
|
35
|
+
return [] unless elements.any?
|
21
36
|
|
22
|
-
|
23
|
-
return super
|
24
|
-
end
|
37
|
+
e = elements.first
|
25
38
|
|
26
|
-
if
|
27
|
-
return []
|
28
|
-
end
|
29
|
-
|
30
|
-
unless elements.any?
|
31
|
-
return []
|
32
|
-
end
|
33
|
-
|
34
|
-
first_element = elements.first
|
35
|
-
|
36
|
-
if first_element.respond_to?(:ast)
|
37
|
-
return first_element.ast
|
38
|
-
end
|
39
|
+
return e.ast if e.respond_to?(:ast)
|
39
40
|
|
40
41
|
[]
|
41
42
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
module
|
1
|
+
module Jievro
|
2
2
|
grammar LiteralArray
|
3
3
|
|
4
4
|
rule literal_array
|
@@ -6,36 +6,19 @@ module Kauri
|
|
6
6
|
def tokens
|
7
7
|
tokens = []
|
8
8
|
|
9
|
-
tokens.push(
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
unless ws1.text_value.empty?
|
15
|
-
tokens.concat(ws1.tokens)
|
16
|
-
end
|
17
|
-
|
18
|
-
unless items.text_value.empty?
|
19
|
-
tokens.concat(items.tokens)
|
20
|
-
end
|
21
|
-
|
22
|
-
unless ws2.text_value.empty?
|
23
|
-
tokens.concat(ws2.tokens)
|
24
|
-
end
|
25
|
-
|
26
|
-
tokens.push({
|
27
|
-
type: 'T_CLOSE_SQUARE_BRACKET',
|
28
|
-
value: ']'
|
29
|
-
})
|
9
|
+
tokens.push(T_OPEN_SQUARE_BRACKET)
|
10
|
+
tokens.concat(ws1.tokens) unless ws1.text_value.empty?
|
11
|
+
tokens.concat(items.tokens) unless items.text_value.empty?
|
12
|
+
tokens.concat(ws2.tokens) unless ws2.text_value.empty?
|
13
|
+
tokens.push(T_CLOSE_SQUARE_BRACKET)
|
30
14
|
|
31
15
|
tokens
|
32
16
|
end
|
33
17
|
|
34
18
|
def ast
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
unless items.text_value.empty?
|
19
|
+
if items.text_value.empty?
|
20
|
+
values = []
|
21
|
+
else
|
39
22
|
values = items.ast
|
40
23
|
end
|
41
24
|
|
@@ -56,21 +39,10 @@ module Kauri
|
|
56
39
|
|
57
40
|
unless head.text_value.empty?
|
58
41
|
head.elements.each { |e|
|
59
|
-
|
60
42
|
tokens.concat(e.expression.tokens)
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
end
|
65
|
-
|
66
|
-
tokens.push({
|
67
|
-
type: 'T_COMMA',
|
68
|
-
value: ','
|
69
|
-
})
|
70
|
-
|
71
|
-
unless e.ws2.text_value.empty?
|
72
|
-
tokens.concat(e.ws2.tokens)
|
73
|
-
end
|
43
|
+
tokens.concat(e.ws1.tokens) unless e.ws1.text_value.empty?
|
44
|
+
tokens.push(T_COMMA)
|
45
|
+
tokens.concat(e.ws2.tokens) unless e.ws2.text_value.empty?
|
74
46
|
}
|
75
47
|
end
|
76
48
|
|
@@ -1,4 +1,4 @@
|
|
1
|
-
module
|
1
|
+
module Jievro
|
2
2
|
grammar LiteralBoolean
|
3
3
|
|
4
4
|
rule literal_boolean
|
@@ -8,13 +8,9 @@ module Kauri
|
|
8
8
|
rule literal_true
|
9
9
|
'true' {
|
10
10
|
def tokens
|
11
|
-
[
|
12
|
-
{
|
13
|
-
type: 'T_TRUE',
|
14
|
-
value: text_value
|
15
|
-
}
|
16
|
-
]
|
11
|
+
[T_TRUE]
|
17
12
|
end
|
13
|
+
|
18
14
|
def ast
|
19
15
|
[
|
20
16
|
{
|
@@ -29,13 +25,9 @@ module Kauri
|
|
29
25
|
rule literal_false
|
30
26
|
'false' {
|
31
27
|
def tokens
|
32
|
-
[
|
33
|
-
{
|
34
|
-
type: 'T_FALSE',
|
35
|
-
value: text_value
|
36
|
-
}
|
37
|
-
]
|
28
|
+
[T_FALSE]
|
38
29
|
end
|
30
|
+
|
39
31
|
def ast
|
40
32
|
[
|
41
33
|
{
|
@@ -1,6 +1,4 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
module Kauri
|
1
|
+
module Jievro
|
4
2
|
grammar LiteralDecimalFloatingPoint
|
5
3
|
|
6
4
|
rule literal_decimal_floating_point
|
@@ -13,16 +11,12 @@ module Kauri
|
|
13
11
|
) {
|
14
12
|
def tokens
|
15
13
|
[
|
16
|
-
|
17
|
-
type: 'T_LITERAL_FLOATING_POINT_DECIMAL',
|
18
|
-
value: text_value
|
19
|
-
}
|
14
|
+
T_LITERAL_FLOATING_POINT_DECIMAL(text_value)
|
20
15
|
]
|
21
16
|
end
|
22
17
|
|
23
18
|
def ast
|
24
|
-
|
25
|
-
converter = Kauri::Tools::Converter::DecimalFloatStringToFloatConverter.new
|
19
|
+
converter = Jievro::Tools::Converter::DecimalFloatStringToFloatConverter.new
|
26
20
|
|
27
21
|
[
|
28
22
|
{
|
@@ -1,4 +1,4 @@
|
|
1
|
-
module
|
1
|
+
module Jievro
|
2
2
|
grammar LiteralDictionary
|
3
3
|
|
4
4
|
rule literal_dictionary
|
@@ -6,25 +6,11 @@ module Kauri
|
|
6
6
|
def tokens
|
7
7
|
tokens = []
|
8
8
|
|
9
|
-
tokens.push(
|
10
|
-
|
11
|
-
value: '['
|
12
|
-
})
|
13
|
-
|
14
|
-
unless ws1.text_value.empty?
|
15
|
-
tokens.concat(ws1.tokens)
|
16
|
-
end
|
17
|
-
|
9
|
+
tokens.push(T_OPEN_SQUARE_BRACKET)
|
10
|
+
tokens.concat(ws1.tokens) unless ws1.text_value.empty?
|
18
11
|
tokens.concat(content.tokens)
|
19
|
-
|
20
|
-
|
21
|
-
tokens.concat(ws2.tokens)
|
22
|
-
end
|
23
|
-
|
24
|
-
tokens.push({
|
25
|
-
type: 'T_CLOSE_SQUARE_BRACKET',
|
26
|
-
value: ']'
|
27
|
-
})
|
12
|
+
tokens.concat(ws2.tokens) unless ws2.text_value.empty?
|
13
|
+
tokens.push(T_CLOSE_SQUARE_BRACKET)
|
28
14
|
|
29
15
|
tokens
|
30
16
|
end
|
@@ -38,28 +24,25 @@ module Kauri
|
|
38
24
|
rule literal_dictionary_content
|
39
25
|
(items:literal_dictionary_items / ':') {
|
40
26
|
def tokens
|
41
|
-
|
42
27
|
if defined? items
|
43
28
|
tokens = items.tokens
|
44
29
|
else
|
45
|
-
tokens = [
|
46
|
-
type: 'T_COLON',
|
47
|
-
value: ':'
|
48
|
-
}]
|
30
|
+
tokens = [T_COLON]
|
49
31
|
end
|
50
32
|
|
51
33
|
tokens
|
52
34
|
end
|
53
35
|
|
54
36
|
def ast
|
55
|
-
|
56
37
|
if defined? items
|
57
38
|
ast = items.ast
|
58
39
|
else
|
59
|
-
ast = [
|
60
|
-
|
61
|
-
|
62
|
-
|
40
|
+
ast = [
|
41
|
+
{
|
42
|
+
__type: 'literal-dictionary',
|
43
|
+
pairs: []
|
44
|
+
}
|
45
|
+
]
|
63
46
|
end
|
64
47
|
|
65
48
|
ast
|
@@ -73,20 +56,9 @@ module Kauri
|
|
73
56
|
tokens = []
|
74
57
|
|
75
58
|
tokens.concat(key.tokens)
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
end
|
80
|
-
|
81
|
-
tokens.push({
|
82
|
-
type: 'T_COLON',
|
83
|
-
value: ':'
|
84
|
-
})
|
85
|
-
|
86
|
-
unless ws2.text_value.empty?
|
87
|
-
tokens.concat(ws2.tokens)
|
88
|
-
end
|
89
|
-
|
59
|
+
tokens.concat(ws1.tokens) unless ws1.text_value.empty?
|
60
|
+
tokens.push(T_COLON)
|
61
|
+
tokens.concat(ws2.tokens) unless ws2.text_value.empty?
|
90
62
|
tokens.concat(value.tokens)
|
91
63
|
|
92
64
|
tokens
|
@@ -111,21 +83,10 @@ module Kauri
|
|
111
83
|
|
112
84
|
unless head.text_value.empty?
|
113
85
|
head.elements.each { |e|
|
114
|
-
|
115
86
|
tokens.concat(e.item.tokens)
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
end
|
120
|
-
|
121
|
-
tokens.push({
|
122
|
-
type: 'T_COMMA',
|
123
|
-
value: ','
|
124
|
-
})
|
125
|
-
|
126
|
-
unless e.ws2.text_value.empty?
|
127
|
-
tokens.concat(e.ws2.tokens)
|
128
|
-
end
|
87
|
+
tokens.concat(e.ws1.tokens) unless e.ws1.text_value.empty?
|
88
|
+
tokens.push(T_COMMA)
|
89
|
+
tokens.concat(e.ws2.tokens) unless e.ws2.text_value.empty?
|
129
90
|
}
|
130
91
|
end
|
131
92
|
|