jievro-parser 0.5.0 → 0.6.0

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