jievro-parser 0.8.0 → 0.9.0

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