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.
Files changed (79) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +3 -3
  3. data/Rakefile +1 -1
  4. data/jievro-parser.gemspec +1 -1
  5. data/lib/jievro/parser/binary_operator.rb +27 -38
  6. data/lib/jievro/parser/grammar/code_block.treetop +1 -1
  7. data/lib/jievro/parser/grammar/declaration/constant_declaration.treetop +2 -8
  8. data/lib/jievro/parser/grammar/declaration/declaration.treetop +47 -5
  9. data/lib/jievro/parser/grammar/declaration/function_declaration.treetop +26 -105
  10. data/lib/jievro/parser/grammar/declaration/initializer_declaration.treetop +16 -0
  11. data/lib/jievro/parser/grammar/declaration/protocol_declaration.treetop +164 -0
  12. data/lib/jievro/parser/grammar/declaration/struct_declaration.treetop +49 -0
  13. data/lib/jievro/parser/grammar/declaration/typealias_declaration.treetop +64 -0
  14. data/lib/jievro/parser/grammar/declaration/variable_declaration.treetop +113 -9
  15. data/lib/jievro/parser/grammar/expression/binary_expression.treetop +5 -22
  16. data/lib/jievro/parser/grammar/expression/closure_expression.treetop +28 -86
  17. data/lib/jievro/parser/grammar/expression/expression.treetop +13 -13
  18. data/lib/jievro/parser/grammar/expression/function_call_expression.treetop +2 -6
  19. data/lib/jievro/parser/grammar/expression/literal_expression.treetop +1 -1
  20. data/lib/jievro/parser/grammar/expression/parenthesized_expression.treetop +15 -54
  21. data/lib/jievro/parser/grammar/expression/postfix_expression.treetop +1 -1
  22. data/lib/jievro/parser/grammar/expression/prefix_expression.treetop +1 -1
  23. data/lib/jievro/parser/grammar/expression/primary_expression.treetop +1 -1
  24. data/lib/jievro/parser/grammar/expression/range_expression.treetop +4 -18
  25. data/lib/jievro/parser/grammar/expression/self_expression.treetop +2 -7
  26. data/lib/jievro/parser/grammar/expression/super_expression.treetop +2 -7
  27. data/lib/jievro/parser/grammar/expression/wildcard_expression.treetop +1 -1
  28. data/lib/jievro/parser/grammar/generics/generic_argument_clause.treetop +8 -34
  29. data/lib/jievro/parser/grammar/generics/generics.treetop +2 -2
  30. data/lib/jievro/parser/grammar/grammar.treetop +35 -28
  31. data/lib/jievro/parser/grammar/identifier.treetop +2 -2
  32. data/lib/jievro/parser/grammar/implicit_parameter_name.treetop +1 -1
  33. data/lib/jievro/parser/grammar/literal/literal.treetop +25 -24
  34. data/lib/jievro/parser/grammar/literal/literal_array.treetop +12 -40
  35. data/lib/jievro/parser/grammar/literal/literal_boolean.treetop +5 -13
  36. data/lib/jievro/parser/grammar/literal/literal_decimal_floating_point.treetop +3 -9
  37. data/lib/jievro/parser/grammar/literal/literal_dictionary.treetop +18 -57
  38. data/lib/jievro/parser/grammar/literal/literal_hexadecimal_floating_point.treetop +3 -9
  39. data/lib/jievro/parser/grammar/literal/literal_integer_binary.treetop +3 -9
  40. data/lib/jievro/parser/grammar/literal/literal_integer_decimal.treetop +3 -9
  41. data/lib/jievro/parser/grammar/literal/literal_integer_hexadecimal.treetop +3 -9
  42. data/lib/jievro/parser/grammar/literal/literal_integer_octal.treetop +3 -9
  43. data/lib/jievro/parser/grammar/literal/literal_nil.treetop +2 -7
  44. data/lib/jievro/parser/grammar/literal/literal_numeric.treetop +11 -18
  45. data/lib/jievro/parser/grammar/literal/literal_string.treetop +14 -46
  46. data/lib/jievro/parser/grammar/operator.treetop +1 -1
  47. data/lib/jievro/parser/grammar/pattern/pattern.treetop +4 -4
  48. data/lib/jievro/parser/grammar/pattern/pattern_identifier.treetop +1 -1
  49. data/lib/jievro/parser/grammar/pattern/pattern_initializer.treetop +18 -70
  50. data/lib/jievro/parser/grammar/pattern/pattern_wildcard.treetop +1 -1
  51. data/lib/jievro/parser/grammar/statement/branch/branch.treetop +2 -2
  52. data/lib/jievro/parser/grammar/statement/branch/if.treetop +1 -1
  53. data/lib/jievro/parser/grammar/statement/loop/do_while.treetop +1 -1
  54. data/lib/jievro/parser/grammar/statement/loop/for.treetop +1 -1
  55. data/lib/jievro/parser/grammar/statement/loop/for_in.treetop +1 -1
  56. data/lib/jievro/parser/grammar/statement/loop/loop.treetop +5 -5
  57. data/lib/jievro/parser/grammar/statement/loop/while.treetop +1 -1
  58. data/lib/jievro/parser/grammar/statement/statement.treetop +3 -3
  59. data/lib/jievro/parser/grammar/type/type.treetop +7 -5
  60. data/lib/jievro/parser/grammar/type/type_annotation.treetop +1 -1
  61. data/lib/jievro/parser/grammar/type/type_array.treetop +1 -1
  62. data/lib/jievro/parser/grammar/type/type_dictionary.treetop +1 -1
  63. data/lib/jievro/parser/grammar/type/type_identifier.treetop +7 -14
  64. data/lib/jievro/parser/grammar/type/type_inheritance_clause.treetop +57 -0
  65. data/lib/jievro/parser/grammar/whitespace.treetop +1 -1
  66. data/lib/jievro/parser/grammar/wildcard.treetop +1 -1
  67. data/lib/jievro/parser/string_parser.rb +2 -7
  68. data/lib/jievro/parser/tools/converter/binary_string_to_int_converter.rb +6 -7
  69. data/lib/jievro/parser/tools/converter/converter.rb +1 -1
  70. data/lib/jievro/parser/tools/converter/decimal_float_string_to_float_converter.rb +5 -6
  71. data/lib/jievro/parser/tools/converter/decimal_string_to_int_converter.rb +5 -6
  72. data/lib/jievro/parser/tools/converter/hexadecimal_float_string_to_float_converter.rb +9 -14
  73. data/lib/jievro/parser/tools/converter/hexadecimal_string_to_int_converter.rb +5 -6
  74. data/lib/jievro/parser/tools/converter/octal_string_to_int_converter.rb +5 -6
  75. data/lib/jievro/parser/tools/quote_stripper.rb +1 -2
  76. data/lib/jievro/parser/tools/shunting_yard.rb +18 -32
  77. data/lib/jievro/parser/tools/tokens.rb +159 -0
  78. data/lib/jievro/parser/version.rb +1 -1
  79. metadata +24 -19
@@ -1,4 +1,4 @@
1
- module Kauri
1
+ module Jievro
2
2
  grammar ClosureExpression
3
3
 
4
4
  rule closure_expression
@@ -6,33 +6,15 @@ module Kauri
6
6
  def tokens
7
7
  tokens = []
8
8
 
9
- tokens.push({
10
- type: 'T_OPEN_CURLY_BRACKET',
11
- value: '{'
12
- })
13
-
14
- unless ws1.text_value.empty?
15
- tokens.concat(ws1.tokens)
16
- end
17
-
18
- unless closure_signature.text_value.empty?
19
- tokens.concat(closure_signature.tokens)
20
- end
21
-
22
- unless ws2.text_value.empty?
23
- tokens.concat(ws2.tokens)
24
- end
9
+ tokens.push(T_OPEN_CURLY_BRACKET)
10
+ tokens.concat(ws1.tokens) unless ws1.text_value.empty?
11
+ tokens.concat(closure_signature.tokens) \
12
+ unless closure_signature.text_value.empty?
25
13
 
14
+ tokens.concat(ws2.tokens) unless ws2.text_value.empty?
26
15
  tokens.concat(statement_list.tokens)
27
-
28
- unless ws3.text_value.empty?
29
- tokens.concat(ws3.tokens)
30
- end
31
-
32
- tokens.push({
33
- type: 'T_CLOSE_CURLY_BRACKET',
34
- value: '}'
35
- })
16
+ tokens.concat(ws3.tokens) unless ws3.text_value.empty?
17
+ tokens.push(T_CLOSE_CURLY_BRACKET)
36
18
 
37
19
  tokens
38
20
  end
@@ -44,9 +26,8 @@ module Kauri
44
26
  body: statement_list.ast
45
27
  }
46
28
 
47
- unless closure_signature.text_value.empty?
48
- ast[:signature] = closure_signature.ast
49
- end
29
+ ast[:signature] = closure_signature.ast \
30
+ unless closure_signature.text_value.empty?
50
31
 
51
32
  [ast]
52
33
  end
@@ -60,11 +41,7 @@ module Kauri
60
41
 
61
42
  tokens.concat(capture_list.tokens)
62
43
  tokens.concat(ws.tokens)
63
-
64
- tokens.push({
65
- type: 'T_IN',
66
- value: 'in'
67
- })
44
+ tokens.push(T_IN)
68
45
 
69
46
  tokens
70
47
  end
@@ -80,31 +57,13 @@ module Kauri
80
57
  def tokens
81
58
  tokens = []
82
59
 
83
- tokens.push({
84
- type: 'T_OPEN_SQUARE_BRACKET',
85
- value: '['
86
- })
87
-
88
- unless ws1.text_value.empty?
89
- tokens.concat(ws1.tokens)
90
- end
91
-
60
+ tokens.push(T_OPEN_SQUARE_BRACKET)
61
+ tokens.concat(ws1.tokens) unless ws1.text_value.empty?
92
62
  tokens.concat(capture_specifier.tokens)
93
-
94
- unless ws2.text_value.empty?
95
- tokens.concat(ws2.tokens)
96
- end
97
-
63
+ tokens.concat(ws2.tokens) unless ws2.text_value.empty?
98
64
  tokens.concat(expression.tokens)
99
-
100
- unless ws3.text_value.empty?
101
- tokens.concat(ws3.tokens)
102
- end
103
-
104
- tokens.push({
105
- type: 'T_CLOSE_SQUARE_BRACKET',
106
- value: ']'
107
- })
65
+ tokens.concat(ws3.tokens) unless ws3.text_value.empty?
66
+ tokens.push(T_CLOSE_SQUARE_BRACKET)
108
67
 
109
68
  tokens
110
69
  end
@@ -129,10 +88,12 @@ module Kauri
129
88
  rule weak_or_unowned_capture_specifier
130
89
  ('weak' / 'unowned') {
131
90
  def tokens
132
- [{
133
- type: 'T_' + text_value.upcase,
134
- value: text_value
135
- }]
91
+ [
92
+ {
93
+ type: 'T_' + text_value.upcase,
94
+ value: text_value
95
+ }
96
+ ]
136
97
  end
137
98
 
138
99
  def ast
@@ -146,37 +107,18 @@ module Kauri
146
107
  def tokens
147
108
  tokens = []
148
109
 
149
- tokens.push({
150
- type: 'T_UNOWNED',
151
- value: 'unowned'
152
- })
153
-
154
- unless ws1.text_value.empty?
155
- tokens.concat(ws1.tokens)
156
- end
157
-
158
- tokens.push({
159
- type: 'T_OPEN_ROUND_BRACKET',
160
- value: '('
161
- })
162
-
163
- unless ws2.text_value.empty?
164
- tokens.concat(ws2.tokens)
165
- end
110
+ tokens.push(T_UNOWNED)
111
+ tokens.concat(ws1.tokens) unless ws1.text_value.empty?
112
+ tokens.push(T_OPEN_ROUND_BRACKET)
113
+ tokens.concat(ws2.tokens) unless ws2.text_value.empty?
166
114
 
167
115
  tokens.push({
168
116
  type: 'T_' + safe_or_unsafe.text_value.upcase,
169
117
  value: safe_or_unsafe.text_value
170
118
  })
171
119
 
172
- unless ws3.text_value.empty?
173
- tokens.concat(ws3.tokens)
174
- end
175
-
176
- tokens.push({
177
- type: 'T_CLOSE_ROUND_BRACKET',
178
- value: ')'
179
- })
120
+ tokens.concat(ws3.tokens) unless ws3.text_value.empty?
121
+ tokens.push(T_CLOSE_ROUND_BRACKET)
180
122
 
181
123
  tokens
182
124
  end
@@ -11,21 +11,21 @@ require 'jievro/parser/grammar/expression/closure_expression'
11
11
  require 'jievro/parser/grammar/expression/self_expression'
12
12
  require 'jievro/parser/grammar/expression/super_expression'
13
13
 
14
- module Kauri
14
+ module Jievro
15
15
  grammar Expression
16
16
 
17
- include Kauri::LiteralExpression
18
- include Kauri::PrefixExpression
19
- include Kauri::PostfixExpression
20
- include Kauri::BinaryExpression
21
- include Kauri::RangeExpression
22
- include Kauri::PrimaryExpression
23
- include Kauri::ParenthesizedExpression
24
- include Kauri::WildcardExpression
25
- include Kauri::FunctionCallExpression
26
- include Kauri::ClosureExpression
27
- include Kauri::SelfExpression
28
- include Kauri::SuperExpression
17
+ include Jievro::LiteralExpression
18
+ include Jievro::PrefixExpression
19
+ include Jievro::PostfixExpression
20
+ include Jievro::BinaryExpression
21
+ include Jievro::RangeExpression
22
+ include Jievro::PrimaryExpression
23
+ include Jievro::ParenthesizedExpression
24
+ include Jievro::WildcardExpression
25
+ include Jievro::FunctionCallExpression
26
+ include Jievro::ClosureExpression
27
+ include Jievro::SelfExpression
28
+ include Jievro::SuperExpression
29
29
 
30
30
  rule expression
31
31
  super_expression
@@ -1,4 +1,4 @@
1
- module Kauri
1
+ module Jievro
2
2
  grammar FunctionCallExpression
3
3
 
4
4
  rule function_call_expression
@@ -7,11 +7,7 @@ module Kauri
7
7
  tokens = []
8
8
 
9
9
  tokens.concat(callee.tokens)
10
-
11
- unless ws.text_value.empty?
12
- tokens.concat(ws.tokens)
13
- end
14
-
10
+ tokens.concat(ws.tokens) unless ws.text_value.empty?
15
11
  tokens.concat(parameters.tokens)
16
12
 
17
13
  tokens
@@ -1,4 +1,4 @@
1
- module Kauri
1
+ module Jievro
2
2
  grammar LiteralExpression
3
3
 
4
4
  rule literal_expression
@@ -1,41 +1,24 @@
1
- module Kauri
1
+ module Jievro
2
2
  grammar ParenthesizedExpression
3
3
 
4
4
  rule parenthesized_expression
5
5
  '(' ws1:_ expression:expression_element_list? ws2:_ ')' {
6
6
  def tokens
7
-
8
7
  tokens = []
9
8
 
10
- tokens.push({
11
- type: 'T_OPEN_ROUND_BRACKET',
12
- value: '('
13
- })
14
-
15
- unless ws1.text_value.empty?
16
- tokens.concat(ws1.tokens)
17
- end
18
-
19
- unless expression.text_value.empty?
20
- tokens.concat(expression.tokens)
21
- end
22
-
23
- unless ws2.text_value.empty?
24
- tokens.concat(ws2.tokens)
25
- end
26
-
27
- tokens.push({
28
- type: 'T_CLOSE_ROUND_BRACKET',
29
- value: ')'
30
- })
9
+ tokens.push(T_OPEN_ROUND_BRACKET)
10
+ tokens.concat(ws1.tokens) unless ws1.text_value.empty?
11
+ tokens.concat(expression.tokens) unless expression.text_value.empty?
12
+ tokens.concat(ws2.tokens) unless ws2.text_value.empty?
13
+ tokens.push(T_CLOSE_ROUND_BRACKET)
31
14
 
32
15
  tokens
33
16
  end
34
17
 
35
18
  def ast
36
- ast = []
37
-
38
- unless expression.text_value.empty?
19
+ if expression.text_value.empty?
20
+ ast = []
21
+ else
39
22
  ast = expression.ast
40
23
  end
41
24
 
@@ -51,21 +34,10 @@ module Kauri
51
34
 
52
35
  unless head.text_value.empty?
53
36
  head.elements.each { |e|
54
-
55
37
  tokens.concat(e.expression.tokens)
56
-
57
- unless e.ws1.text_value.empty?
58
- tokens.concat(e.ws1.tokens)
59
- end
60
-
61
- tokens.push({
62
- type: 'T_COMMA',
63
- value: ','
64
- })
65
-
66
- unless e.ws2.text_value.empty?
67
- tokens.concat(e.ws2.tokens)
68
- end
38
+ tokens.concat(e.ws1.tokens) unless e.ws1.text_value.empty?
39
+ tokens.push(T_COMMA)
40
+ tokens.concat(e.ws2.tokens) unless e.ws2.text_value.empty?
69
41
  }
70
42
  end
71
43
 
@@ -112,20 +84,9 @@ module Kauri
112
84
  tokens = []
113
85
 
114
86
  tokens.concat(identifier.tokens)
115
-
116
- unless ws1.text_value.empty?
117
- tokens.concat(ws1.tokens)
118
- end
119
-
120
- tokens.push({
121
- type: 'T_COLON',
122
- value: ':'
123
- })
124
-
125
- unless ws2.text_value.empty?
126
- tokens.concat(ws2.tokens)
127
- end
128
-
87
+ tokens.concat(ws1.tokens) unless ws1.text_value.empty?
88
+ tokens.push(T_COLON)
89
+ tokens.concat(ws2.tokens) unless ws2.text_value.empty?
129
90
  tokens.concat(expression.tokens)
130
91
 
131
92
  tokens
@@ -1,4 +1,4 @@
1
- module Kauri
1
+ module Jievro
2
2
  grammar PostfixExpression
3
3
 
4
4
  rule postfix_expression
@@ -1,4 +1,4 @@
1
- module Kauri
1
+ module Jievro
2
2
  grammar PrefixExpression
3
3
 
4
4
  rule prefix_expression
@@ -1,4 +1,4 @@
1
- module Kauri
1
+ module Jievro
2
2
  grammar PrimaryExpression
3
3
 
4
4
  rule primary_expression
@@ -1,24 +1,15 @@
1
- module Kauri
1
+ module Jievro
2
2
  grammar RangeExpression
3
3
 
4
4
  rule range_expression
5
5
  left:primary_expression ws1:_ range_operator:range_operator ws2:_ right:primary_expression {
6
6
  def tokens
7
-
8
7
  tokens = []
9
8
 
10
9
  tokens.concat(left.tokens)
11
-
12
- unless ws1.text_value.empty?
13
- tokens.concat(ws1.tokens)
14
- end
15
-
10
+ tokens.concat(ws1.tokens) unless ws1.text_value.empty?
16
11
  tokens.concat(range_operator.tokens)
17
-
18
- unless ws2.text_value.empty?
19
- tokens.concat(ws2.tokens)
20
- end
21
-
12
+ tokens.concat(ws2.tokens) unless ws2.text_value.empty?
22
13
  tokens.concat(right.tokens)
23
14
 
24
15
  tokens
@@ -40,12 +31,7 @@ module Kauri
40
31
  rule range_operator
41
32
  ('...' / '..<') {
42
33
  def tokens
43
- [
44
- {
45
- type: 'T_OPERATOR',
46
- value: text_value
47
- }
48
- ]
34
+ [T_OPERATOR(text_value)]
49
35
  end
50
36
  }
51
37
  end
@@ -1,15 +1,10 @@
1
- module Kauri
1
+ module Jievro
2
2
  grammar SelfExpression
3
3
 
4
4
  rule self_expression
5
5
  'self' {
6
6
  def tokens
7
- [
8
- {
9
- type: 'T_SELF',
10
- value: 'self'
11
- }
12
- ]
7
+ [T_SELF]
13
8
  end
14
9
 
15
10
  def ast
@@ -1,15 +1,10 @@
1
- module Kauri
1
+ module Jievro
2
2
  grammar SuperExpression
3
3
 
4
4
  rule super_expression
5
5
  'super' {
6
6
  def tokens
7
- [
8
- {
9
- type: 'T_SUPER',
10
- value: 'super'
11
- }
12
- ]
7
+ [T_SUPER]
13
8
  end
14
9
 
15
10
  def ast
@@ -1,4 +1,4 @@
1
- module Kauri
1
+ module Jievro
2
2
  grammar WildcardExpression
3
3
 
4
4
  rule wildcard_expression
@@ -1,4 +1,4 @@
1
- module Kauri
1
+ module Jievro
2
2
  grammar GenericArgumentClause
3
3
 
4
4
  rule generic_argument_clause
@@ -6,25 +6,11 @@ module Kauri
6
6
  def tokens
7
7
  tokens = []
8
8
 
9
- tokens.push({
10
- type: 'T_OPEN_ANGLE_BRACKET',
11
- value: '<'
12
- })
13
-
14
- unless ws1.text_value.empty?
15
- tokens.concat(ws1.tokens)
16
- end
17
-
9
+ tokens.push(T_OPEN_ANGLE_BRACKET)
10
+ tokens.concat(ws1.tokens) unless ws1.text_value.empty?
18
11
  tokens.concat(generic_argument_list.tokens)
19
-
20
- unless ws2.text_value.empty?
21
- tokens.concat(ws2.tokens)
22
- end
23
-
24
- tokens.push({
25
- type: 'T_CLOSE_ANGLE_BRACKET',
26
- value: '>'
27
- })
12
+ tokens.concat(ws2.tokens) unless ws2.text_value.empty?
13
+ tokens.push(T_CLOSE_ANGLE_BRACKET)
28
14
 
29
15
  tokens
30
16
  end
@@ -42,21 +28,10 @@ module Kauri
42
28
 
43
29
  unless head.text_value.empty?
44
30
  head.elements.each { |e|
45
-
46
31
  tokens.concat(e.generic_argument.tokens)
47
-
48
- unless e.ws1.text_value.empty?
49
- tokens.concat(e.ws1.tokens)
50
- end
51
-
52
- tokens.push({
53
- type: 'T_COMMA',
54
- value: ','
55
- })
56
-
57
- unless e.ws2.text_value.empty?
58
- tokens.concat(e.ws2.tokens)
59
- end
32
+ tokens.concat(e.ws1.tokens) unless e.ws1.text_value.empty?
33
+ tokens.push(T_COMMA)
34
+ tokens.concat(e.ws2.tokens) unless e.ws2.text_value.empty?
60
35
  }
61
36
  end
62
37
 
@@ -66,7 +41,6 @@ module Kauri
66
41
  end
67
42
 
68
43
  def ast
69
-
70
44
  ast = []
71
45
 
72
46
  unless head.text_value.empty?