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,9 +1,9 @@
1
1
  require 'jievro/parser/grammar/generics/generic_argument_clause'
2
2
 
3
- module Kauri
3
+ module Jievro
4
4
  grammar Generics
5
5
 
6
- include Kauri::GenericArgumentClause
6
+ include Jievro::GenericArgumentClause
7
7
 
8
8
  end
9
9
  end
@@ -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 Kauri::Whitespace
20
- include Kauri::Literal
21
- include Kauri::Identifier
22
- include Kauri::Declaration
23
- include Kauri::Statement
24
- include Kauri::Expression
25
- include Kauri::Generics
26
- include Kauri::Type
27
- include Kauri::CodeBlock
28
- include Kauri::Pattern
29
- include Kauri::Wildcard
30
- include Kauri::Operator
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
- unless elements.any?
46
- tokens = []
47
- else
48
- tokens = elements[0].tokens
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
- if elements.length
58
- e = elements[0]
59
- if e.respond_to?(:ast)
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 Kauri
3
+ module Jievro
4
4
  grammar Identifier
5
5
 
6
- include Kauri::ImplicitParameterName
6
+ include Jievro::ImplicitParameterName
7
7
 
8
8
  rule identifier
9
9
  implicit_parameter_name / backticked_identifier / regular_identifier
@@ -1,4 +1,4 @@
1
- module Kauri
1
+ module Jievro
2
2
  grammar ImplicitParameterName
3
3
 
4
4
  rule implicit_parameter_name
@@ -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 Kauri
8
+ module Jievro
9
9
  grammar Literal
10
10
 
11
- include Kauri::LiteralNil
12
- include Kauri::LiteralBoolean
13
- include Kauri::LiteralNumeric
14
- include Kauri::LiteralString
15
- include Kauri::LiteralArray
16
- include Kauri::LiteralDictionary
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
- (literal_nil / literal_boolean / literal_numeric / literal_string / literal_array / literal_dictionary) {
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
- if defined?(super)
23
- return super
24
- end
37
+ e = elements.first
25
38
 
26
- if elements.nil?
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 Kauri
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
- type: 'T_OPEN_SQUARE_BRACKET',
11
- value: '['
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
- values = []
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
- unless e.ws1.text_value.empty?
63
- tokens.concat(e.ws1.tokens)
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 Kauri
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
- require 'jievro/parser/tools/converter/converter'
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 Kauri
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
- type: 'T_OPEN_SQUARE_BRACKET',
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
- unless ws2.text_value.empty?
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
- __type: 'literal-dictionary',
61
- pairs: []
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
- unless ws1.text_value.empty?
78
- tokens.concat(ws1.tokens)
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
- unless e.ws1.text_value.empty?
118
- tokens.concat(e.ws1.tokens)
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