jievro-parser 0.5.0 → 0.6.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 (81) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +1 -1
  3. data/LICENSE.txt +22 -0
  4. data/{parser.gemspec → jievro-parser.gemspec} +1 -1
  5. data/lib/jievro-parser/binary_operator.rb +66 -0
  6. data/lib/{parser → jievro-parser}/grammar/code_block.treetop +0 -0
  7. data/lib/{parser → jievro-parser}/grammar/declaration/constant_declaration.treetop +0 -0
  8. data/lib/{parser → jievro-parser}/grammar/declaration/declaration.treetop +3 -3
  9. data/lib/{parser → jievro-parser}/grammar/declaration/function_declaration.treetop +0 -0
  10. data/lib/{parser → jievro-parser}/grammar/declaration/variable_declaration.treetop +0 -0
  11. data/lib/{parser → jievro-parser}/grammar/expression/binary_expression.treetop +2 -2
  12. data/lib/{parser → jievro-parser}/grammar/expression/closure_expression.treetop +0 -0
  13. data/lib/{parser → jievro-parser}/grammar/expression/expression.treetop +12 -12
  14. data/lib/{parser → jievro-parser}/grammar/expression/function_call_expression.treetop +0 -0
  15. data/lib/{parser → jievro-parser}/grammar/expression/literal_expression.treetop +0 -0
  16. data/lib/{parser → jievro-parser}/grammar/expression/parenthesized_expression.treetop +0 -0
  17. data/lib/{parser → jievro-parser}/grammar/expression/postfix_expression.treetop +0 -0
  18. data/lib/{parser → jievro-parser}/grammar/expression/prefix_expression.treetop +0 -0
  19. data/lib/{parser → jievro-parser}/grammar/expression/primary_expression.treetop +0 -0
  20. data/lib/{parser → jievro-parser}/grammar/expression/range_expression.treetop +0 -0
  21. data/lib/{parser → jievro-parser}/grammar/expression/self_expression.treetop +0 -0
  22. data/lib/{parser → jievro-parser}/grammar/expression/super_expression.treetop +0 -0
  23. data/lib/{parser → jievro-parser}/grammar/expression/wildcard_expression.treetop +0 -0
  24. data/lib/{parser → jievro-parser}/grammar/generics/generic_argument_clause.treetop +0 -0
  25. data/lib/{parser → jievro-parser}/grammar/generics/generics.treetop +1 -1
  26. data/lib/{parser → jievro-parser}/grammar/grammar.treetop +13 -13
  27. data/lib/{parser → jievro-parser}/grammar/identifier.treetop +1 -1
  28. data/lib/{parser → jievro-parser}/grammar/implicit_parameter_name.treetop +0 -0
  29. data/lib/{parser → jievro-parser}/grammar/literal/literal.treetop +6 -6
  30. data/lib/{parser → jievro-parser}/grammar/literal/literal_array.treetop +0 -0
  31. data/lib/{parser → jievro-parser}/grammar/literal/literal_boolean.treetop +0 -0
  32. data/lib/{parser → jievro-parser}/grammar/literal/literal_decimal_floating_point.treetop +1 -1
  33. data/lib/{parser → jievro-parser}/grammar/literal/literal_dictionary.treetop +0 -0
  34. data/lib/{parser → jievro-parser}/grammar/literal/literal_hexadecimal_floating_point.treetop +1 -1
  35. data/lib/{parser → jievro-parser}/grammar/literal/literal_integer_binary.treetop +1 -1
  36. data/lib/{parser → jievro-parser}/grammar/literal/literal_integer_decimal.treetop +1 -1
  37. data/lib/{parser → jievro-parser}/grammar/literal/literal_integer_hexadecimal.treetop +1 -1
  38. data/lib/{parser → jievro-parser}/grammar/literal/literal_integer_octal.treetop +1 -1
  39. data/lib/{parser → jievro-parser}/grammar/literal/literal_nil.treetop +0 -0
  40. data/lib/{parser → jievro-parser}/grammar/literal/literal_numeric.treetop +6 -6
  41. data/lib/{parser → jievro-parser}/grammar/literal/literal_string.treetop +0 -0
  42. data/lib/{parser → jievro-parser}/grammar/operator.treetop +0 -0
  43. data/lib/{parser → jievro-parser}/grammar/pattern/pattern.treetop +3 -3
  44. data/lib/{parser → jievro-parser}/grammar/pattern/pattern_identifier.treetop +0 -0
  45. data/lib/{parser → jievro-parser}/grammar/pattern/pattern_initializer.treetop +0 -0
  46. data/lib/{parser → jievro-parser}/grammar/pattern/pattern_wildcard.treetop +0 -0
  47. data/lib/{parser → jievro-parser}/grammar/statement/branch/branch.treetop +1 -1
  48. data/lib/{parser → jievro-parser}/grammar/statement/branch/if.treetop +0 -0
  49. data/lib/{parser → jievro-parser}/grammar/statement/loop/do_while.treetop +0 -0
  50. data/lib/{parser → jievro-parser}/grammar/statement/loop/for.treetop +0 -0
  51. data/lib/{parser → jievro-parser}/grammar/statement/loop/for_in.treetop +0 -0
  52. data/lib/{parser → jievro-parser}/grammar/statement/loop/loop.treetop +4 -4
  53. data/lib/{parser → jievro-parser}/grammar/statement/loop/while.treetop +0 -0
  54. data/lib/{parser → jievro-parser}/grammar/statement/statement.treetop +2 -2
  55. data/lib/{parser → jievro-parser}/grammar/type/type.treetop +4 -4
  56. data/lib/{parser → jievro-parser}/grammar/type/type_annotation.treetop +0 -0
  57. data/lib/{parser → jievro-parser}/grammar/type/type_array.treetop +0 -0
  58. data/lib/{parser → jievro-parser}/grammar/type/type_dictionary.treetop +0 -0
  59. data/lib/{parser → jievro-parser}/grammar/type/type_identifier.treetop +0 -0
  60. data/lib/{parser → jievro-parser}/grammar/whitespace.treetop +0 -0
  61. data/lib/{parser → jievro-parser}/grammar/wildcard.treetop +0 -0
  62. data/lib/jievro-parser/parse_result.rb +18 -0
  63. data/lib/{parser/parser.rb → jievro-parser/string_parser.rb} +4 -4
  64. data/lib/{parser → jievro-parser}/tools/converter/binary_string_to_int_converter.rb +0 -0
  65. data/lib/jievro-parser/tools/converter/converter.rb +12 -0
  66. data/lib/{parser → jievro-parser}/tools/converter/decimal_float_string_to_float_converter.rb +0 -0
  67. data/lib/{parser → jievro-parser}/tools/converter/decimal_string_to_int_converter.rb +0 -0
  68. data/lib/{parser → jievro-parser}/tools/converter/hexadecimal_float_string_to_float_converter.rb +0 -0
  69. data/lib/{parser → jievro-parser}/tools/converter/hexadecimal_string_to_int_converter.rb +0 -0
  70. data/lib/{parser → jievro-parser}/tools/converter/octal_string_to_int_converter.rb +0 -0
  71. data/lib/{parser → jievro-parser}/tools/quote_stripper.rb +0 -0
  72. data/lib/jievro-parser/tools/shunting_yard.rb +82 -0
  73. data/lib/{parser → jievro-parser}/tools/tokens.rb +0 -0
  74. data/lib/{parser → jievro-parser}/version.rb +1 -1
  75. data/lib/jievro-parser.rb +2 -0
  76. metadata +75 -74
  77. data/lib/parser/binary_operator.rb +0 -64
  78. data/lib/parser/parse_result.rb +0 -17
  79. data/lib/parser/tools/converter/converter.rb +0 -12
  80. data/lib/parser/tools/shunting_yard.rb +0 -80
  81. data/lib/parser.rb +0 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b82db236ed40ea039b1c0bd30f0ac134ae2465ba
4
- data.tar.gz: f1f43a531b64ffdddcb356d0b44f469da7c8801b
3
+ metadata.gz: cfe4b7d79c43aade83e662d14cf77f718ec8d1fb
4
+ data.tar.gz: e6c1a31a6bbbbfcbd197a1de24c9a22eb1b9d8f8
5
5
  SHA512:
6
- metadata.gz: 07a6a4cd021b6f64ebf6122a1456615ced2b76bf016aa3f5516a2f33713df8bc34cd01659f0ec9deb16b4b6b27e2e552a46f6b1070a947bdbc8709e4ec2a69dd
7
- data.tar.gz: 0f50db01513965bf9df975a06a7dac9d4b373007ae8bc8f6bb279b539efa535b583701ccc72040f94fe141359475634bbafb8f0ac90224e9eda8b2e7811fb7ee
6
+ metadata.gz: 69f3e4fad33c8cc0a2accec0943bc62358b9008cd37e0567f3688c36a319868af92ad70afeebb0b6bf60ed2a464ded715d64aebc696524bbf5bb37f5665a4bc5
7
+ data.tar.gz: 7ab685ee9cf1e26592d9628d23cc239f2a57f23c74a7a53a0b9a22f793d25ec06c4f72d7f0df9c0763310ba6ae50a774e51ce63d5f19782dbaa604fb245b1b4b
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- jievro-parser (0.5.0)
4
+ jievro-parser (0.6.0)
5
5
  treetop (~> 1.6)
6
6
 
7
7
  GEM
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2015 Stefano Azzalini
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -1,7 +1,7 @@
1
1
  lib = File.expand_path('../lib', __FILE__)
2
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
3
 
4
- require 'parser/version'
4
+ require 'jievro-parser/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = 'jievro-parser'
@@ -0,0 +1,66 @@
1
+ module Jievro
2
+ module Parser
3
+ class BinaryOperator
4
+
5
+ def initialize(sign, associativity, precedence)
6
+ @sign = sign
7
+ @associativity = associativity
8
+ @precedence = precedence
9
+ end
10
+
11
+ def sign
12
+ @sign
13
+ end
14
+
15
+ def associativity
16
+ @associativity
17
+ end
18
+
19
+ def precedence
20
+ @precedence
21
+ end
22
+
23
+ def self.get(sign)
24
+ case sign
25
+ when '<<', '>>'
26
+ operator = BinaryOperator.new(sign, :none, 160)
27
+ when '*', '/', '%', '&*', '&/', '&%', '&'
28
+ operator = BinaryOperator.new(sign, :left, 150)
29
+ when '+', '-', '&+', '&-', '|', '^'
30
+ operator = BinaryOperator.new(sign, :left, 140)
31
+ when '..<', '...'
32
+ operator = BinaryOperator.new(sign, :none, 135)
33
+ when 'is', 'as'
34
+ operator = BinaryOperator.new(sign, :none, 132)
35
+ when '<', '<=', '>', '>=', '==', '!=', '===', '!==', '~='
36
+ operator = BinaryOperator.new(sign, :left, 130)
37
+ when '&&'
38
+ operator = BinaryOperator.new(sign, :left, 120)
39
+ when '||'
40
+ operator = BinaryOperator.new(sign, :left, 110)
41
+ when '??'
42
+ operator = BinaryOperator.new(sign, :right, 110)
43
+ when '?:'
44
+ operator = BinaryOperator.new(sign, :right, 100)
45
+ when '=', '*=', '/=', '%=', '+=', '-=', '<<=', '>>=', '&=', '^=', '|=', '&&=', '||='
46
+ operator = BinaryOperator.new(sign, :right, 90)
47
+ else
48
+ raise Exception, 'sign not managed'
49
+ end
50
+
51
+ operator
52
+ end
53
+
54
+ def self.is_operator(sign)
55
+ begin
56
+ self.get(sign)
57
+ is_operator = true
58
+ rescue Exception
59
+ is_operator = false
60
+ end
61
+
62
+ is_operator
63
+ end
64
+ end
65
+ end
66
+ end
@@ -1,6 +1,6 @@
1
- require 'parser/grammar/declaration/constant_declaration'
2
- require 'parser/grammar/declaration/variable_declaration'
3
- require 'parser/grammar/declaration/function_declaration'
1
+ require 'jievro-parser/grammar/declaration/constant_declaration'
2
+ require 'jievro-parser/grammar/declaration/variable_declaration'
3
+ require 'jievro-parser/grammar/declaration/function_declaration'
4
4
 
5
5
  module Kauri
6
6
  grammar Declaration
@@ -1,4 +1,4 @@
1
- require 'parser/tools/shunting_yard'
1
+ require 'jievro-parser/tools/shunting_yard'
2
2
 
3
3
  module Kauri
4
4
  grammar BinaryExpression
@@ -22,7 +22,7 @@ module Kauri
22
22
 
23
23
  def ast
24
24
 
25
- sy = Kauri::Tools::ShuntingYard.new
25
+ sy = Jievro::Parser::Tools::ShuntingYard.new
26
26
 
27
27
  flatten_ast = []
28
28
 
@@ -1,15 +1,15 @@
1
- require 'parser/grammar/expression/literal_expression'
2
- require 'parser/grammar/expression/prefix_expression'
3
- require 'parser/grammar/expression/postfix_expression'
4
- require 'parser/grammar/expression/binary_expression'
5
- require 'parser/grammar/expression/range_expression'
6
- require 'parser/grammar/expression/primary_expression'
7
- require 'parser/grammar/expression/parenthesized_expression'
8
- require 'parser/grammar/expression/wildcard_expression'
9
- require 'parser/grammar/expression/function_call_expression'
10
- require 'parser/grammar/expression/closure_expression'
11
- require 'parser/grammar/expression/self_expression'
12
- require 'parser/grammar/expression/super_expression'
1
+ require 'jievro-parser/grammar/expression/literal_expression'
2
+ require 'jievro-parser/grammar/expression/prefix_expression'
3
+ require 'jievro-parser/grammar/expression/postfix_expression'
4
+ require 'jievro-parser/grammar/expression/binary_expression'
5
+ require 'jievro-parser/grammar/expression/range_expression'
6
+ require 'jievro-parser/grammar/expression/primary_expression'
7
+ require 'jievro-parser/grammar/expression/parenthesized_expression'
8
+ require 'jievro-parser/grammar/expression/wildcard_expression'
9
+ require 'jievro-parser/grammar/expression/function_call_expression'
10
+ require 'jievro-parser/grammar/expression/closure_expression'
11
+ require 'jievro-parser/grammar/expression/self_expression'
12
+ require 'jievro-parser/grammar/expression/super_expression'
13
13
 
14
14
  module Kauri
15
15
  grammar Expression
@@ -1,4 +1,4 @@
1
- require 'parser/grammar/generics/generic_argument_clause'
1
+ require 'jievro-parser/grammar/generics/generic_argument_clause'
2
2
 
3
3
  module Kauri
4
4
  grammar Generics
@@ -1,17 +1,17 @@
1
- require 'parser/grammar/whitespace'
2
- require 'parser/grammar/literal/literal'
3
- require 'parser/grammar/identifier'
4
- require 'parser/grammar/declaration/declaration'
5
- require 'parser/grammar/statement/statement'
6
- require 'parser/grammar/expression/expression'
7
- require 'parser/grammar/generics/generics'
8
- require 'parser/grammar/type/type'
9
- require 'parser/grammar/code_block'
10
- require 'parser/grammar/pattern/pattern'
11
- require 'parser/grammar/wildcard'
12
- require 'parser/grammar/operator'
1
+ require 'jievro-parser/grammar/whitespace'
2
+ require 'jievro-parser/grammar/literal/literal'
3
+ require 'jievro-parser/grammar/identifier'
4
+ require 'jievro-parser/grammar/declaration/declaration'
5
+ require 'jievro-parser/grammar/statement/statement'
6
+ require 'jievro-parser/grammar/expression/expression'
7
+ require 'jievro-parser/grammar/generics/generics'
8
+ require 'jievro-parser/grammar/type/type'
9
+ require 'jievro-parser/grammar/code_block'
10
+ require 'jievro-parser/grammar/pattern/pattern'
11
+ require 'jievro-parser/grammar/wildcard'
12
+ require 'jievro-parser/grammar/operator'
13
13
 
14
- require 'parser/tools/tokens'
14
+ require 'jievro-parser/tools/tokens'
15
15
 
16
16
  module Jievro
17
17
  grammar Swift
@@ -1,4 +1,4 @@
1
- require 'parser/grammar/implicit_parameter_name'
1
+ require 'jievro-parser/grammar/implicit_parameter_name'
2
2
 
3
3
  module Kauri
4
4
  grammar Identifier
@@ -1,9 +1,9 @@
1
- require 'parser/grammar/literal/literal_nil'
2
- require 'parser/grammar/literal/literal_boolean'
3
- require 'parser/grammar/literal/literal_numeric'
4
- require 'parser/grammar/literal/literal_string'
5
- require 'parser/grammar/literal/literal_array'
6
- require 'parser/grammar/literal/literal_dictionary'
1
+ require 'jievro-parser/grammar/literal/literal_nil'
2
+ require 'jievro-parser/grammar/literal/literal_boolean'
3
+ require 'jievro-parser/grammar/literal/literal_numeric'
4
+ require 'jievro-parser/grammar/literal/literal_string'
5
+ require 'jievro-parser/grammar/literal/literal_array'
6
+ require 'jievro-parser/grammar/literal/literal_dictionary'
7
7
 
8
8
  module Kauri
9
9
  grammar Literal
@@ -1,4 +1,4 @@
1
- require 'parser/tools/converter/converter'
1
+ require 'jievro-parser/tools/converter/converter'
2
2
 
3
3
  module Kauri
4
4
  grammar LiteralDecimalFloatingPoint
@@ -1,4 +1,4 @@
1
- require 'parser/tools/converter/converter'
1
+ require 'jievro-parser/tools/converter/converter'
2
2
 
3
3
  module Kauri
4
4
  grammar LiteralHexadecimalFloatingPoint
@@ -1,4 +1,4 @@
1
- require 'parser/tools/converter/converter'
1
+ require 'jievro-parser/tools/converter/converter'
2
2
 
3
3
  module Kauri
4
4
  grammar LiteralIntegerBinary
@@ -1,4 +1,4 @@
1
- require 'parser/tools/converter/converter'
1
+ require 'jievro-parser/tools/converter/converter'
2
2
 
3
3
  module Kauri
4
4
  grammar LiteralIntegerDecimal
@@ -1,4 +1,4 @@
1
- require 'parser/tools/converter/converter'
1
+ require 'jievro-parser/tools/converter/converter'
2
2
 
3
3
  module Kauri
4
4
  grammar LiteralIntegerHexadecimal
@@ -1,4 +1,4 @@
1
- require 'parser/tools/converter/converter'
1
+ require 'jievro-parser/tools/converter/converter'
2
2
 
3
3
  module Kauri
4
4
  grammar LiteralIntegerOctal
@@ -1,9 +1,9 @@
1
- require 'parser/grammar/literal/literal_integer_binary'
2
- require 'parser/grammar/literal/literal_integer_octal'
3
- require 'parser/grammar/literal/literal_integer_decimal'
4
- require 'parser/grammar/literal/literal_integer_hexadecimal'
5
- require 'parser/grammar/literal/literal_decimal_floating_point'
6
- require 'parser/grammar/literal/literal_hexadecimal_floating_point'
1
+ require 'jievro-parser/grammar/literal/literal_integer_binary'
2
+ require 'jievro-parser/grammar/literal/literal_integer_octal'
3
+ require 'jievro-parser/grammar/literal/literal_integer_decimal'
4
+ require 'jievro-parser/grammar/literal/literal_integer_hexadecimal'
5
+ require 'jievro-parser/grammar/literal/literal_decimal_floating_point'
6
+ require 'jievro-parser/grammar/literal/literal_hexadecimal_floating_point'
7
7
 
8
8
  module Kauri
9
9
  grammar LiteralNumeric
@@ -1,6 +1,6 @@
1
- require 'parser/grammar/pattern/pattern_wildcard'
2
- require 'parser/grammar/pattern/pattern_identifier'
3
- require 'parser/grammar/pattern/pattern_initializer'
1
+ require 'jievro-parser/grammar/pattern/pattern_wildcard'
2
+ require 'jievro-parser/grammar/pattern/pattern_identifier'
3
+ require 'jievro-parser/grammar/pattern/pattern_initializer'
4
4
 
5
5
  module Kauri
6
6
  grammar Pattern
@@ -1,4 +1,4 @@
1
- require 'parser/grammar/statement/branch/if'
1
+ require 'jievro-parser/grammar/statement/branch/if'
2
2
 
3
3
  module Kauri
4
4
  module Grammar
@@ -1,7 +1,7 @@
1
- require 'parser/grammar/statement/loop/for'
2
- require 'parser/grammar/statement/loop/for_in'
3
- require 'parser/grammar/statement/loop/while'
4
- require 'parser/grammar/statement/loop/do_while'
1
+ require 'jievro-parser/grammar/statement/loop/for'
2
+ require 'jievro-parser/grammar/statement/loop/for_in'
3
+ require 'jievro-parser/grammar/statement/loop/while'
4
+ require 'jievro-parser/grammar/statement/loop/do_while'
5
5
 
6
6
  module Kauri
7
7
  module Grammar
@@ -1,5 +1,5 @@
1
- require 'parser/grammar/statement/loop/loop'
2
- require 'parser/grammar/statement/branch/branch'
1
+ require 'jievro-parser/grammar/statement/loop/loop'
2
+ require 'jievro-parser/grammar/statement/branch/branch'
3
3
 
4
4
  module Kauri
5
5
  grammar Statement
@@ -1,7 +1,7 @@
1
- require 'parser/grammar/type/type_identifier'
2
- require 'parser/grammar/type/type_array'
3
- require 'parser/grammar/type/type_dictionary'
4
- require 'parser/grammar/type/type_annotation'
1
+ require 'jievro-parser/grammar/type/type_identifier'
2
+ require 'jievro-parser/grammar/type/type_array'
3
+ require 'jievro-parser/grammar/type/type_dictionary'
4
+ require 'jievro-parser/grammar/type/type_annotation'
5
5
 
6
6
  module Kauri
7
7
  grammar Type
@@ -0,0 +1,18 @@
1
+ module Jievro
2
+ module Parser
3
+ class ParseResult
4
+ def initialize(tokens, ast)
5
+ @tokens = tokens
6
+ @ast = ast
7
+ end
8
+
9
+ def tokens
10
+ @tokens
11
+ end
12
+
13
+ def ast
14
+ @ast
15
+ end
16
+ end
17
+ end
18
+ end
@@ -1,11 +1,11 @@
1
1
  require 'treetop'
2
2
  require 'polyglot'
3
- require 'parser/grammar/grammar'
4
- require 'parser/parse_result'
3
+ require 'jievro-parser/grammar/grammar'
4
+ require 'jievro-parser/parse_result'
5
5
 
6
6
  module Jievro
7
7
  module Parser
8
- class Parser
8
+ class StringParser
9
9
  def parse(source)
10
10
 
11
11
  parser = Jievro::SwiftParser.new
@@ -28,7 +28,7 @@ module Jievro
28
28
  ast = parsed.ast
29
29
  end
30
30
 
31
- Jievro::ParseResult.new(tokens, ast)
31
+ Jievro::Parser::ParseResult.new(tokens, ast)
32
32
  end
33
33
  end
34
34
  end
@@ -0,0 +1,12 @@
1
+ module Kauri
2
+ module Tools
3
+ module Converter
4
+ require 'jievro-parser/tools/converter/binary_string_to_int_converter'
5
+ require 'jievro-parser/tools/converter/decimal_float_string_to_float_converter'
6
+ require 'jievro-parser/tools/converter/decimal_string_to_int_converter'
7
+ require 'jievro-parser/tools/converter/hexadecimal_float_string_to_float_converter'
8
+ require 'jievro-parser/tools/converter/hexadecimal_string_to_int_converter'
9
+ require 'jievro-parser/tools/converter/octal_string_to_int_converter'
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,82 @@
1
+ require 'jievro-parser/binary_operator'
2
+
3
+ module Jievro
4
+ module Parser
5
+ module Tools
6
+ class ShuntingYard
7
+
8
+ def generate_ast(infix_tokens)
9
+
10
+ node_stack = []
11
+ rpn_tokens = generate_rpn(infix_tokens)
12
+
13
+ rpn_tokens.each { |token|
14
+
15
+ if BinaryOperator.is_operator(token)
16
+ right = node_stack.pop
17
+ left = node_stack.pop
18
+
19
+ node_stack.push({
20
+ block_type: 'binary-expression',
21
+ operator: token,
22
+ left: left,
23
+ right: right
24
+ })
25
+
26
+ else
27
+ node_stack.push(token)
28
+ end
29
+ }
30
+
31
+ node_stack
32
+ end
33
+
34
+ def generate_rpn(infix_tokens)
35
+
36
+ output_queue = []
37
+ operator_stack = []
38
+
39
+ infix_tokens.each { |token|
40
+
41
+ if BinaryOperator.is_operator(token)
42
+
43
+ current_operator = BinaryOperator.get(token)
44
+
45
+ until operator_stack.empty? do
46
+
47
+ stack_operator = operator_stack.last
48
+
49
+ move_operator_to_queue = false
50
+
51
+ if :left == current_operator.associativity and current_operator.precedence <= stack_operator.precedence
52
+ move_operator_to_queue = true
53
+ elsif :right == current_operator.associativity and current_operator.precedence < stack_operator.precedence
54
+ move_operator_to_queue = true
55
+ end
56
+
57
+ unless move_operator_to_queue
58
+ break
59
+ end
60
+
61
+ operator_stack.pop
62
+ output_queue.push stack_operator.sign
63
+ end
64
+
65
+ operator_stack.push(current_operator)
66
+ else
67
+
68
+ output_queue.push(token)
69
+
70
+ end
71
+ }
72
+
73
+ until operator_stack.empty?
74
+ output_queue.push(operator_stack.pop.sign)
75
+ end
76
+
77
+ output_queue
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end
File without changes
@@ -1,5 +1,5 @@
1
1
  module Jievro
2
2
  module Parser
3
- VERSION = '0.5.0'
3
+ VERSION = '0.6.0'
4
4
  end
5
5
  end
@@ -0,0 +1,2 @@
1
+ require 'jievro-parser/string_parser'
2
+ require 'jievro-parser/version'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jievro-parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stefano Azzalini
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-04 00:00:00.000000000 Z
11
+ date: 2015-05-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: treetop
@@ -76,80 +76,81 @@ files:
76
76
  - .travis.yml
77
77
  - Gemfile
78
78
  - Gemfile.lock
79
+ - LICENSE.txt
79
80
  - README.md
80
81
  - Rakefile
81
- - lib/parser.rb
82
- - lib/parser/binary_operator.rb
83
- - lib/parser/grammar/code_block.treetop
84
- - lib/parser/grammar/declaration/constant_declaration.treetop
85
- - lib/parser/grammar/declaration/declaration.treetop
86
- - lib/parser/grammar/declaration/function_declaration.treetop
87
- - lib/parser/grammar/declaration/variable_declaration.treetop
88
- - lib/parser/grammar/expression/binary_expression.treetop
89
- - lib/parser/grammar/expression/closure_expression.treetop
90
- - lib/parser/grammar/expression/expression.treetop
91
- - lib/parser/grammar/expression/function_call_expression.treetop
92
- - lib/parser/grammar/expression/literal_expression.treetop
93
- - lib/parser/grammar/expression/parenthesized_expression.treetop
94
- - lib/parser/grammar/expression/postfix_expression.treetop
95
- - lib/parser/grammar/expression/prefix_expression.treetop
96
- - lib/parser/grammar/expression/primary_expression.treetop
97
- - lib/parser/grammar/expression/range_expression.treetop
98
- - lib/parser/grammar/expression/self_expression.treetop
99
- - lib/parser/grammar/expression/super_expression.treetop
100
- - lib/parser/grammar/expression/wildcard_expression.treetop
101
- - lib/parser/grammar/generics/generic_argument_clause.treetop
102
- - lib/parser/grammar/generics/generics.treetop
103
- - lib/parser/grammar/grammar.treetop
104
- - lib/parser/grammar/identifier.treetop
105
- - lib/parser/grammar/implicit_parameter_name.treetop
106
- - lib/parser/grammar/literal/literal.treetop
107
- - lib/parser/grammar/literal/literal_array.treetop
108
- - lib/parser/grammar/literal/literal_boolean.treetop
109
- - lib/parser/grammar/literal/literal_decimal_floating_point.treetop
110
- - lib/parser/grammar/literal/literal_dictionary.treetop
111
- - lib/parser/grammar/literal/literal_hexadecimal_floating_point.treetop
112
- - lib/parser/grammar/literal/literal_integer_binary.treetop
113
- - lib/parser/grammar/literal/literal_integer_decimal.treetop
114
- - lib/parser/grammar/literal/literal_integer_hexadecimal.treetop
115
- - lib/parser/grammar/literal/literal_integer_octal.treetop
116
- - lib/parser/grammar/literal/literal_nil.treetop
117
- - lib/parser/grammar/literal/literal_numeric.treetop
118
- - lib/parser/grammar/literal/literal_string.treetop
119
- - lib/parser/grammar/operator.treetop
120
- - lib/parser/grammar/pattern/pattern.treetop
121
- - lib/parser/grammar/pattern/pattern_identifier.treetop
122
- - lib/parser/grammar/pattern/pattern_initializer.treetop
123
- - lib/parser/grammar/pattern/pattern_wildcard.treetop
124
- - lib/parser/grammar/statement/branch/branch.treetop
125
- - lib/parser/grammar/statement/branch/if.treetop
126
- - lib/parser/grammar/statement/loop/do_while.treetop
127
- - lib/parser/grammar/statement/loop/for.treetop
128
- - lib/parser/grammar/statement/loop/for_in.treetop
129
- - lib/parser/grammar/statement/loop/loop.treetop
130
- - lib/parser/grammar/statement/loop/while.treetop
131
- - lib/parser/grammar/statement/statement.treetop
132
- - lib/parser/grammar/type/type.treetop
133
- - lib/parser/grammar/type/type_annotation.treetop
134
- - lib/parser/grammar/type/type_array.treetop
135
- - lib/parser/grammar/type/type_dictionary.treetop
136
- - lib/parser/grammar/type/type_identifier.treetop
137
- - lib/parser/grammar/whitespace.treetop
138
- - lib/parser/grammar/wildcard.treetop
139
- - lib/parser/parse_result.rb
140
- - lib/parser/parser.rb
141
- - lib/parser/tools/converter/binary_string_to_int_converter.rb
142
- - lib/parser/tools/converter/converter.rb
143
- - lib/parser/tools/converter/decimal_float_string_to_float_converter.rb
144
- - lib/parser/tools/converter/decimal_string_to_int_converter.rb
145
- - lib/parser/tools/converter/hexadecimal_float_string_to_float_converter.rb
146
- - lib/parser/tools/converter/hexadecimal_string_to_int_converter.rb
147
- - lib/parser/tools/converter/octal_string_to_int_converter.rb
148
- - lib/parser/tools/quote_stripper.rb
149
- - lib/parser/tools/shunting_yard.rb
150
- - lib/parser/tools/tokens.rb
151
- - lib/parser/version.rb
152
- - parser.gemspec
82
+ - jievro-parser.gemspec
83
+ - lib/jievro-parser.rb
84
+ - lib/jievro-parser/binary_operator.rb
85
+ - lib/jievro-parser/grammar/code_block.treetop
86
+ - lib/jievro-parser/grammar/declaration/constant_declaration.treetop
87
+ - lib/jievro-parser/grammar/declaration/declaration.treetop
88
+ - lib/jievro-parser/grammar/declaration/function_declaration.treetop
89
+ - lib/jievro-parser/grammar/declaration/variable_declaration.treetop
90
+ - lib/jievro-parser/grammar/expression/binary_expression.treetop
91
+ - lib/jievro-parser/grammar/expression/closure_expression.treetop
92
+ - lib/jievro-parser/grammar/expression/expression.treetop
93
+ - lib/jievro-parser/grammar/expression/function_call_expression.treetop
94
+ - lib/jievro-parser/grammar/expression/literal_expression.treetop
95
+ - lib/jievro-parser/grammar/expression/parenthesized_expression.treetop
96
+ - lib/jievro-parser/grammar/expression/postfix_expression.treetop
97
+ - lib/jievro-parser/grammar/expression/prefix_expression.treetop
98
+ - lib/jievro-parser/grammar/expression/primary_expression.treetop
99
+ - lib/jievro-parser/grammar/expression/range_expression.treetop
100
+ - lib/jievro-parser/grammar/expression/self_expression.treetop
101
+ - lib/jievro-parser/grammar/expression/super_expression.treetop
102
+ - lib/jievro-parser/grammar/expression/wildcard_expression.treetop
103
+ - lib/jievro-parser/grammar/generics/generic_argument_clause.treetop
104
+ - lib/jievro-parser/grammar/generics/generics.treetop
105
+ - lib/jievro-parser/grammar/grammar.treetop
106
+ - lib/jievro-parser/grammar/identifier.treetop
107
+ - lib/jievro-parser/grammar/implicit_parameter_name.treetop
108
+ - lib/jievro-parser/grammar/literal/literal.treetop
109
+ - lib/jievro-parser/grammar/literal/literal_array.treetop
110
+ - lib/jievro-parser/grammar/literal/literal_boolean.treetop
111
+ - lib/jievro-parser/grammar/literal/literal_decimal_floating_point.treetop
112
+ - lib/jievro-parser/grammar/literal/literal_dictionary.treetop
113
+ - lib/jievro-parser/grammar/literal/literal_hexadecimal_floating_point.treetop
114
+ - lib/jievro-parser/grammar/literal/literal_integer_binary.treetop
115
+ - lib/jievro-parser/grammar/literal/literal_integer_decimal.treetop
116
+ - lib/jievro-parser/grammar/literal/literal_integer_hexadecimal.treetop
117
+ - lib/jievro-parser/grammar/literal/literal_integer_octal.treetop
118
+ - lib/jievro-parser/grammar/literal/literal_nil.treetop
119
+ - lib/jievro-parser/grammar/literal/literal_numeric.treetop
120
+ - lib/jievro-parser/grammar/literal/literal_string.treetop
121
+ - lib/jievro-parser/grammar/operator.treetop
122
+ - lib/jievro-parser/grammar/pattern/pattern.treetop
123
+ - lib/jievro-parser/grammar/pattern/pattern_identifier.treetop
124
+ - lib/jievro-parser/grammar/pattern/pattern_initializer.treetop
125
+ - lib/jievro-parser/grammar/pattern/pattern_wildcard.treetop
126
+ - lib/jievro-parser/grammar/statement/branch/branch.treetop
127
+ - lib/jievro-parser/grammar/statement/branch/if.treetop
128
+ - lib/jievro-parser/grammar/statement/loop/do_while.treetop
129
+ - lib/jievro-parser/grammar/statement/loop/for.treetop
130
+ - lib/jievro-parser/grammar/statement/loop/for_in.treetop
131
+ - lib/jievro-parser/grammar/statement/loop/loop.treetop
132
+ - lib/jievro-parser/grammar/statement/loop/while.treetop
133
+ - lib/jievro-parser/grammar/statement/statement.treetop
134
+ - lib/jievro-parser/grammar/type/type.treetop
135
+ - lib/jievro-parser/grammar/type/type_annotation.treetop
136
+ - lib/jievro-parser/grammar/type/type_array.treetop
137
+ - lib/jievro-parser/grammar/type/type_dictionary.treetop
138
+ - lib/jievro-parser/grammar/type/type_identifier.treetop
139
+ - lib/jievro-parser/grammar/whitespace.treetop
140
+ - lib/jievro-parser/grammar/wildcard.treetop
141
+ - lib/jievro-parser/parse_result.rb
142
+ - lib/jievro-parser/string_parser.rb
143
+ - lib/jievro-parser/tools/converter/binary_string_to_int_converter.rb
144
+ - lib/jievro-parser/tools/converter/converter.rb
145
+ - lib/jievro-parser/tools/converter/decimal_float_string_to_float_converter.rb
146
+ - lib/jievro-parser/tools/converter/decimal_string_to_int_converter.rb
147
+ - lib/jievro-parser/tools/converter/hexadecimal_float_string_to_float_converter.rb
148
+ - lib/jievro-parser/tools/converter/hexadecimal_string_to_int_converter.rb
149
+ - lib/jievro-parser/tools/converter/octal_string_to_int_converter.rb
150
+ - lib/jievro-parser/tools/quote_stripper.rb
151
+ - lib/jievro-parser/tools/shunting_yard.rb
152
+ - lib/jievro-parser/tools/tokens.rb
153
+ - lib/jievro-parser/version.rb
153
154
  homepage: http://jievro.io
154
155
  licenses:
155
156
  - MIT
@@ -1,64 +0,0 @@
1
- module Kauri
2
- class BinaryOperator
3
-
4
- def initialize(sign, associativity, precedence)
5
- @sign = sign
6
- @associativity = associativity
7
- @precedence = precedence
8
- end
9
-
10
- def sign
11
- @sign
12
- end
13
-
14
- def associativity
15
- @associativity
16
- end
17
-
18
- def precedence
19
- @precedence
20
- end
21
-
22
- def self.get(sign)
23
- case sign
24
- when '<<', '>>'
25
- operator = BinaryOperator.new(sign, :none, 160)
26
- when '*', '/', '%', '&*', '&/', '&%', '&'
27
- operator = BinaryOperator.new(sign, :left, 150)
28
- when '+', '-', '&+', '&-', '|', '^'
29
- operator = BinaryOperator.new(sign, :left, 140)
30
- when '..<', '...'
31
- operator = BinaryOperator.new(sign, :none, 135)
32
- when 'is', 'as'
33
- operator = BinaryOperator.new(sign, :none, 132)
34
- when '<', '<=', '>', '>=', '==', '!=', '===', '!==', '~='
35
- operator = BinaryOperator.new(sign, :left, 130)
36
- when '&&'
37
- operator = BinaryOperator.new(sign, :left, 120)
38
- when '||'
39
- operator = BinaryOperator.new(sign, :left, 110)
40
- when '??'
41
- operator = BinaryOperator.new(sign, :right, 110)
42
- when '?:'
43
- operator = BinaryOperator.new(sign, :right, 100)
44
- when '=', '*=', '/=', '%=', '+=', '-=', '<<=', '>>=', '&=', '^=', '|=', '&&=', '||='
45
- operator = BinaryOperator.new(sign, :right, 90)
46
- else
47
- raise Exception, 'sign not managed'
48
- end
49
-
50
- operator
51
- end
52
-
53
- def self.is_operator(sign)
54
- begin
55
- self.get(sign)
56
- is_operator = true
57
- rescue Exception
58
- is_operator = false
59
- end
60
-
61
- is_operator
62
- end
63
- end
64
- end
@@ -1,17 +0,0 @@
1
- module Jievro
2
- class ParseResult
3
-
4
- def initialize(tokens, ast)
5
- @tokens = tokens
6
- @ast = ast
7
- end
8
-
9
- def tokens
10
- @tokens
11
- end
12
-
13
- def ast
14
- @ast
15
- end
16
- end
17
- end
@@ -1,12 +0,0 @@
1
- module Kauri
2
- module Tools
3
- module Converter
4
- require 'parser/tools/converter/binary_string_to_int_converter'
5
- require 'parser/tools/converter/decimal_float_string_to_float_converter'
6
- require 'parser/tools/converter/decimal_string_to_int_converter'
7
- require 'parser/tools/converter/hexadecimal_float_string_to_float_converter'
8
- require 'parser/tools/converter/hexadecimal_string_to_int_converter'
9
- require 'parser/tools/converter/octal_string_to_int_converter'
10
- end
11
- end
12
- end
@@ -1,80 +0,0 @@
1
- require 'parser/binary_operator'
2
-
3
- module Kauri
4
- module Tools
5
- class ShuntingYard
6
-
7
- def generate_ast(infix_tokens)
8
-
9
- node_stack = []
10
- rpn_tokens = generate_rpn(infix_tokens)
11
-
12
- rpn_tokens.each { |token|
13
-
14
- if BinaryOperator.is_operator(token)
15
- right = node_stack.pop
16
- left = node_stack.pop
17
-
18
- node_stack.push({
19
- block_type: 'binary-expression',
20
- operator: token,
21
- left: left,
22
- right: right
23
- })
24
-
25
- else
26
- node_stack.push(token)
27
- end
28
- }
29
-
30
- node_stack
31
- end
32
-
33
- def generate_rpn(infix_tokens)
34
-
35
- output_queue = []
36
- operator_stack = []
37
-
38
- infix_tokens.each { |token|
39
-
40
- if BinaryOperator.is_operator(token)
41
-
42
- current_operator = BinaryOperator.get(token)
43
-
44
- until operator_stack.empty? do
45
-
46
- stack_operator = operator_stack.last
47
-
48
- move_operator_to_queue = false
49
-
50
- if :left == current_operator.associativity and current_operator.precedence <= stack_operator.precedence
51
- move_operator_to_queue = true
52
- elsif :right == current_operator.associativity and current_operator.precedence < stack_operator.precedence
53
- move_operator_to_queue = true
54
- end
55
-
56
- unless move_operator_to_queue
57
- break
58
- end
59
-
60
- operator_stack.pop
61
- output_queue.push stack_operator.sign
62
- end
63
-
64
- operator_stack.push(current_operator)
65
- else
66
-
67
- output_queue.push(token)
68
-
69
- end
70
- }
71
-
72
- until operator_stack.empty?
73
- output_queue.push(operator_stack.pop.sign)
74
- end
75
-
76
- output_queue
77
- end
78
- end
79
- end
80
- end
data/lib/parser.rb DELETED
@@ -1,2 +0,0 @@
1
- require 'parser/parser'
2
- require 'parser/version'