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.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/LICENSE.txt +22 -0
- data/{parser.gemspec → jievro-parser.gemspec} +1 -1
- data/lib/jievro-parser/binary_operator.rb +66 -0
- data/lib/{parser → jievro-parser}/grammar/code_block.treetop +0 -0
- data/lib/{parser → jievro-parser}/grammar/declaration/constant_declaration.treetop +0 -0
- data/lib/{parser → jievro-parser}/grammar/declaration/declaration.treetop +3 -3
- data/lib/{parser → jievro-parser}/grammar/declaration/function_declaration.treetop +0 -0
- data/lib/{parser → jievro-parser}/grammar/declaration/variable_declaration.treetop +0 -0
- data/lib/{parser → jievro-parser}/grammar/expression/binary_expression.treetop +2 -2
- data/lib/{parser → jievro-parser}/grammar/expression/closure_expression.treetop +0 -0
- data/lib/{parser → jievro-parser}/grammar/expression/expression.treetop +12 -12
- data/lib/{parser → jievro-parser}/grammar/expression/function_call_expression.treetop +0 -0
- data/lib/{parser → jievro-parser}/grammar/expression/literal_expression.treetop +0 -0
- data/lib/{parser → jievro-parser}/grammar/expression/parenthesized_expression.treetop +0 -0
- data/lib/{parser → jievro-parser}/grammar/expression/postfix_expression.treetop +0 -0
- data/lib/{parser → jievro-parser}/grammar/expression/prefix_expression.treetop +0 -0
- data/lib/{parser → jievro-parser}/grammar/expression/primary_expression.treetop +0 -0
- data/lib/{parser → jievro-parser}/grammar/expression/range_expression.treetop +0 -0
- data/lib/{parser → jievro-parser}/grammar/expression/self_expression.treetop +0 -0
- data/lib/{parser → jievro-parser}/grammar/expression/super_expression.treetop +0 -0
- data/lib/{parser → jievro-parser}/grammar/expression/wildcard_expression.treetop +0 -0
- data/lib/{parser → jievro-parser}/grammar/generics/generic_argument_clause.treetop +0 -0
- data/lib/{parser → jievro-parser}/grammar/generics/generics.treetop +1 -1
- data/lib/{parser → jievro-parser}/grammar/grammar.treetop +13 -13
- data/lib/{parser → jievro-parser}/grammar/identifier.treetop +1 -1
- data/lib/{parser → jievro-parser}/grammar/implicit_parameter_name.treetop +0 -0
- data/lib/{parser → jievro-parser}/grammar/literal/literal.treetop +6 -6
- data/lib/{parser → jievro-parser}/grammar/literal/literal_array.treetop +0 -0
- data/lib/{parser → jievro-parser}/grammar/literal/literal_boolean.treetop +0 -0
- data/lib/{parser → jievro-parser}/grammar/literal/literal_decimal_floating_point.treetop +1 -1
- data/lib/{parser → jievro-parser}/grammar/literal/literal_dictionary.treetop +0 -0
- data/lib/{parser → jievro-parser}/grammar/literal/literal_hexadecimal_floating_point.treetop +1 -1
- data/lib/{parser → jievro-parser}/grammar/literal/literal_integer_binary.treetop +1 -1
- data/lib/{parser → jievro-parser}/grammar/literal/literal_integer_decimal.treetop +1 -1
- data/lib/{parser → jievro-parser}/grammar/literal/literal_integer_hexadecimal.treetop +1 -1
- data/lib/{parser → jievro-parser}/grammar/literal/literal_integer_octal.treetop +1 -1
- data/lib/{parser → jievro-parser}/grammar/literal/literal_nil.treetop +0 -0
- data/lib/{parser → jievro-parser}/grammar/literal/literal_numeric.treetop +6 -6
- data/lib/{parser → jievro-parser}/grammar/literal/literal_string.treetop +0 -0
- data/lib/{parser → jievro-parser}/grammar/operator.treetop +0 -0
- data/lib/{parser → jievro-parser}/grammar/pattern/pattern.treetop +3 -3
- data/lib/{parser → jievro-parser}/grammar/pattern/pattern_identifier.treetop +0 -0
- data/lib/{parser → jievro-parser}/grammar/pattern/pattern_initializer.treetop +0 -0
- data/lib/{parser → jievro-parser}/grammar/pattern/pattern_wildcard.treetop +0 -0
- data/lib/{parser → jievro-parser}/grammar/statement/branch/branch.treetop +1 -1
- data/lib/{parser → jievro-parser}/grammar/statement/branch/if.treetop +0 -0
- data/lib/{parser → jievro-parser}/grammar/statement/loop/do_while.treetop +0 -0
- data/lib/{parser → jievro-parser}/grammar/statement/loop/for.treetop +0 -0
- data/lib/{parser → jievro-parser}/grammar/statement/loop/for_in.treetop +0 -0
- data/lib/{parser → jievro-parser}/grammar/statement/loop/loop.treetop +4 -4
- data/lib/{parser → jievro-parser}/grammar/statement/loop/while.treetop +0 -0
- data/lib/{parser → jievro-parser}/grammar/statement/statement.treetop +2 -2
- data/lib/{parser → jievro-parser}/grammar/type/type.treetop +4 -4
- data/lib/{parser → jievro-parser}/grammar/type/type_annotation.treetop +0 -0
- data/lib/{parser → jievro-parser}/grammar/type/type_array.treetop +0 -0
- data/lib/{parser → jievro-parser}/grammar/type/type_dictionary.treetop +0 -0
- data/lib/{parser → jievro-parser}/grammar/type/type_identifier.treetop +0 -0
- data/lib/{parser → jievro-parser}/grammar/whitespace.treetop +0 -0
- data/lib/{parser → jievro-parser}/grammar/wildcard.treetop +0 -0
- data/lib/jievro-parser/parse_result.rb +18 -0
- data/lib/{parser/parser.rb → jievro-parser/string_parser.rb} +4 -4
- data/lib/{parser → jievro-parser}/tools/converter/binary_string_to_int_converter.rb +0 -0
- data/lib/jievro-parser/tools/converter/converter.rb +12 -0
- data/lib/{parser → jievro-parser}/tools/converter/decimal_float_string_to_float_converter.rb +0 -0
- data/lib/{parser → jievro-parser}/tools/converter/decimal_string_to_int_converter.rb +0 -0
- data/lib/{parser → jievro-parser}/tools/converter/hexadecimal_float_string_to_float_converter.rb +0 -0
- data/lib/{parser → jievro-parser}/tools/converter/hexadecimal_string_to_int_converter.rb +0 -0
- data/lib/{parser → jievro-parser}/tools/converter/octal_string_to_int_converter.rb +0 -0
- data/lib/{parser → jievro-parser}/tools/quote_stripper.rb +0 -0
- data/lib/jievro-parser/tools/shunting_yard.rb +82 -0
- data/lib/{parser → jievro-parser}/tools/tokens.rb +0 -0
- data/lib/{parser → jievro-parser}/version.rb +1 -1
- data/lib/jievro-parser.rb +2 -0
- metadata +75 -74
- data/lib/parser/binary_operator.rb +0 -64
- data/lib/parser/parse_result.rb +0 -17
- data/lib/parser/tools/converter/converter.rb +0 -12
- data/lib/parser/tools/shunting_yard.rb +0 -80
- data/lib/parser.rb +0 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cfe4b7d79c43aade83e662d14cf77f718ec8d1fb
|
4
|
+
data.tar.gz: e6c1a31a6bbbbfcbd197a1de24c9a22eb1b9d8f8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 69f3e4fad33c8cc0a2accec0943bc62358b9008cd37e0567f3688c36a319868af92ad70afeebb0b6bf60ed2a464ded715d64aebc696524bbf5bb37f5665a4bc5
|
7
|
+
data.tar.gz: 7ab685ee9cf1e26592d9628d23cc239f2a57f23c74a7a53a0b9a22f793d25ec06c4f72d7f0df9c0763310ba6ae50a774e51ce63d5f19782dbaa604fb245b1b4b
|
data/Gemfile.lock
CHANGED
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.
|
@@ -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
|
File without changes
|
File without changes
|
@@ -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
|
File without changes
|
File without changes
|
@@ -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 =
|
25
|
+
sy = Jievro::Parser::Tools::ShuntingYard.new
|
26
26
|
|
27
27
|
flatten_ast = []
|
28
28
|
|
File without changes
|
@@ -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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -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
|
File without changes
|
@@ -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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -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
|
File without changes
|
File without changes
|
@@ -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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -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
|
File without changes
|
@@ -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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -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
|
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
|
File without changes
|
@@ -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
|
data/lib/{parser → jievro-parser}/tools/converter/decimal_float_string_to_float_converter.rb
RENAMED
File without changes
|
File without changes
|
data/lib/{parser → jievro-parser}/tools/converter/hexadecimal_float_string_to_float_converter.rb
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -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
|
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.
|
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-
|
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
|
-
-
|
82
|
-
- lib/parser
|
83
|
-
- lib/parser/
|
84
|
-
- lib/parser/grammar/
|
85
|
-
- lib/parser/grammar/declaration/
|
86
|
-
- lib/parser/grammar/declaration/
|
87
|
-
- lib/parser/grammar/declaration/
|
88
|
-
- lib/parser/grammar/
|
89
|
-
- lib/parser/grammar/expression/
|
90
|
-
- lib/parser/grammar/expression/
|
91
|
-
- lib/parser/grammar/expression/
|
92
|
-
- lib/parser/grammar/expression/
|
93
|
-
- lib/parser/grammar/expression/
|
94
|
-
- lib/parser/grammar/expression/
|
95
|
-
- lib/parser/grammar/expression/
|
96
|
-
- lib/parser/grammar/expression/
|
97
|
-
- lib/parser/grammar/expression/
|
98
|
-
- lib/parser/grammar/expression/
|
99
|
-
- lib/parser/grammar/expression/
|
100
|
-
- lib/parser/grammar/expression/
|
101
|
-
- lib/parser/grammar/
|
102
|
-
- lib/parser/grammar/generics/
|
103
|
-
- lib/parser/grammar/
|
104
|
-
- lib/parser/grammar/
|
105
|
-
- lib/parser/grammar/
|
106
|
-
- lib/parser/grammar/
|
107
|
-
- lib/parser/grammar/literal/
|
108
|
-
- lib/parser/grammar/literal/
|
109
|
-
- lib/parser/grammar/literal/
|
110
|
-
- lib/parser/grammar/literal/
|
111
|
-
- lib/parser/grammar/literal/
|
112
|
-
- lib/parser/grammar/literal/
|
113
|
-
- lib/parser/grammar/literal/
|
114
|
-
- lib/parser/grammar/literal/
|
115
|
-
- lib/parser/grammar/literal/
|
116
|
-
- lib/parser/grammar/literal/
|
117
|
-
- lib/parser/grammar/literal/
|
118
|
-
- lib/parser/grammar/literal/
|
119
|
-
- lib/parser/grammar/
|
120
|
-
- lib/parser/grammar/
|
121
|
-
- lib/parser/grammar/pattern/
|
122
|
-
- lib/parser/grammar/pattern/
|
123
|
-
- lib/parser/grammar/pattern/
|
124
|
-
- lib/parser/grammar/
|
125
|
-
- lib/parser/grammar/statement/branch/
|
126
|
-
- lib/parser/grammar/statement/
|
127
|
-
- lib/parser/grammar/statement/loop/
|
128
|
-
- lib/parser/grammar/statement/loop/
|
129
|
-
- lib/parser/grammar/statement/loop/
|
130
|
-
- lib/parser/grammar/statement/loop/
|
131
|
-
- lib/parser/grammar/statement/
|
132
|
-
- lib/parser/grammar/
|
133
|
-
- lib/parser/grammar/type/
|
134
|
-
- lib/parser/grammar/type/
|
135
|
-
- lib/parser/grammar/type/
|
136
|
-
- lib/parser/grammar/type/
|
137
|
-
- lib/parser/grammar/
|
138
|
-
- lib/parser/grammar/
|
139
|
-
- lib/parser/
|
140
|
-
- lib/parser/
|
141
|
-
- lib/parser/
|
142
|
-
- lib/parser/tools/converter/
|
143
|
-
- lib/parser/tools/converter/
|
144
|
-
- lib/parser/tools/converter/
|
145
|
-
- lib/parser/tools/converter/
|
146
|
-
- lib/parser/tools/converter/
|
147
|
-
- lib/parser/tools/converter/
|
148
|
-
- lib/parser/tools/
|
149
|
-
- lib/parser/tools/
|
150
|
-
- lib/parser/tools/
|
151
|
-
- lib/parser/
|
152
|
-
- parser.
|
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
|
data/lib/parser/parse_result.rb
DELETED
@@ -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