vorax 0.2.0 → 0.3.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.
- data/lib/vorax.rb +1 -0
- data/lib/vorax/parser/grammars/alias.rb +29 -38
- data/lib/vorax/parser/grammars/alias.rl +0 -9
- data/lib/vorax/parser/grammars/column.rb +1 -1
- data/lib/vorax/parser/grammars/column.rl +1 -1
- data/lib/vorax/parser/grammars/common.rl +3 -0
- data/lib/vorax/parser/grammars/for_block.rb +413 -0
- data/lib/vorax/parser/grammars/for_block.rl +67 -0
- data/lib/vorax/parser/grammars/plsql_def.rb +272 -202
- data/lib/vorax/parser/grammars/plsql_def.rl +15 -1
- data/lib/vorax/parser/plsql_structure.rb +71 -12
- data/lib/vorax/version.rb +1 -1
- data/spec/parser_spec.rb +27 -2
- data/spec/plsql_structure_spec.rb +5 -2
- data/spec/sql/test.pkg +15 -0
- metadata +3 -1
data/lib/vorax.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
|
2
2
|
# line 1 "lib/vorax/parser/grammars/alias.rl"
|
3
3
|
|
4
|
-
# line
|
4
|
+
# line 72 "lib/vorax/parser/grammars/alias.rl"
|
5
5
|
|
6
6
|
|
7
7
|
module Vorax
|
@@ -544,7 +544,7 @@ end
|
|
544
544
|
self.alias_en_main = 131;
|
545
545
|
|
546
546
|
|
547
|
-
# line
|
547
|
+
# line 95 "lib/vorax/parser/grammars/alias.rl"
|
548
548
|
|
549
549
|
# line 550 "lib/vorax/parser/grammars/alias.rb"
|
550
550
|
begin
|
@@ -556,7 +556,7 @@ begin
|
|
556
556
|
act = 0
|
557
557
|
end
|
558
558
|
|
559
|
-
# line
|
559
|
+
# line 96 "lib/vorax/parser/grammars/alias.rl"
|
560
560
|
|
561
561
|
# line 562 "lib/vorax/parser/grammars/alias.rb"
|
562
562
|
begin
|
@@ -658,68 +658,59 @@ when 0 then
|
|
658
658
|
# line 5 "lib/vorax/parser/grammars/alias.rl"
|
659
659
|
begin
|
660
660
|
|
661
|
-
#puts "tableref_start: p=#{p}"
|
662
661
|
@t_start = p
|
663
662
|
end
|
664
663
|
when 1 then
|
665
|
-
# line
|
664
|
+
# line 9 "lib/vorax/parser/grammars/alias.rl"
|
666
665
|
begin
|
667
666
|
|
668
667
|
@table_ref = data[(@t_start..p-1)]
|
669
|
-
#puts "tableref_end: @table_ref=#@table_ref"
|
670
668
|
end
|
671
669
|
when 2 then
|
672
|
-
# line
|
670
|
+
# line 13 "lib/vorax/parser/grammars/alias.rl"
|
673
671
|
begin
|
674
672
|
|
675
|
-
#puts "alias_start: p=#{p}"
|
676
673
|
@a_start = p
|
677
674
|
@alias_value = nil
|
678
675
|
end
|
679
676
|
when 3 then
|
680
|
-
# line
|
677
|
+
# line 18 "lib/vorax/parser/grammars/alias.rl"
|
681
678
|
begin
|
682
679
|
|
683
680
|
text = data[(@a_start..p-1)]
|
684
681
|
@alias_value = text unless @not_alias.include?(text.upcase)
|
685
|
-
#puts "alias_end: @alias_value=#@alias_value"
|
686
682
|
end
|
687
683
|
when 4 then
|
688
|
-
# line
|
684
|
+
# line 23 "lib/vorax/parser/grammars/alias.rl"
|
689
685
|
begin
|
690
686
|
|
691
|
-
#puts "subquery_start: p=#{p}"
|
692
687
|
@subquery_text = Parser.walk_balanced_paren(data[(p..-1)]).gsub(/^\(|\)$/, '')
|
693
688
|
p += 1
|
694
689
|
@subquery_range = (p..p+@subquery_text.length-1)
|
695
690
|
p += @subquery_text.length
|
696
691
|
te = p
|
697
|
-
#puts "subquery_end: p=#{p} @subquery_text=#@subquery_text @subquery_range=#@subquery_range"
|
698
692
|
end
|
699
693
|
when 5 then
|
700
|
-
# line
|
694
|
+
# line 31 "lib/vorax/parser/grammars/alias.rl"
|
701
695
|
begin
|
702
696
|
|
703
|
-
#puts "before_with: p=#{p}"
|
704
697
|
@alias_value = nil
|
705
698
|
@subquery_range = nil
|
706
699
|
@subquery_text = nil
|
707
700
|
end
|
708
701
|
when 6 then
|
709
|
-
# line
|
702
|
+
# line 37 "lib/vorax/parser/grammars/alias.rl"
|
710
703
|
begin
|
711
704
|
|
712
705
|
@refs << ExprRef.new(@subquery_text, @subquery_range, @alias_value)
|
713
706
|
@alias_value = nil
|
714
707
|
@subquery_range = nil
|
715
708
|
@subquery_text = nil
|
716
|
-
#puts "after_with"
|
717
709
|
end
|
718
710
|
when 7 then
|
719
|
-
# line
|
711
|
+
# line 44 "lib/vorax/parser/grammars/alias.rl"
|
720
712
|
begin
|
721
713
|
|
722
|
-
#puts "before_tref: p=#{p} @alias_value=#@alias_value @subquery_text=#@subquery_text @subquery_range=#@subquery_range"
|
723
714
|
add_tableref
|
724
715
|
end
|
725
716
|
when 10 then
|
@@ -728,81 +719,81 @@ when 10 then
|
|
728
719
|
te = p+1
|
729
720
|
end
|
730
721
|
when 11 then
|
731
|
-
# line
|
722
|
+
# line 62 "lib/vorax/parser/grammars/alias.rl"
|
732
723
|
begin
|
733
724
|
act = 1; end
|
734
725
|
when 12 then
|
735
|
-
# line
|
726
|
+
# line 64 "lib/vorax/parser/grammars/alias.rl"
|
736
727
|
begin
|
737
728
|
act = 3; end
|
738
729
|
when 13 then
|
739
|
-
# line
|
730
|
+
# line 65 "lib/vorax/parser/grammars/alias.rl"
|
740
731
|
begin
|
741
732
|
act = 4; end
|
742
733
|
when 14 then
|
743
|
-
# line
|
734
|
+
# line 69 "lib/vorax/parser/grammars/alias.rl"
|
744
735
|
begin
|
745
736
|
act = 8; end
|
746
737
|
when 15 then
|
747
|
-
# line
|
738
|
+
# line 63 "lib/vorax/parser/grammars/alias.rl"
|
748
739
|
begin
|
749
740
|
te = p+1
|
750
741
|
end
|
751
742
|
when 16 then
|
752
|
-
# line
|
743
|
+
# line 69 "lib/vorax/parser/grammars/alias.rl"
|
753
744
|
begin
|
754
745
|
te = p+1
|
755
746
|
end
|
756
747
|
when 17 then
|
757
|
-
# line
|
748
|
+
# line 62 "lib/vorax/parser/grammars/alias.rl"
|
758
749
|
begin
|
759
750
|
te = p
|
760
751
|
p = p - 1; end
|
761
752
|
when 18 then
|
762
|
-
# line
|
753
|
+
# line 65 "lib/vorax/parser/grammars/alias.rl"
|
763
754
|
begin
|
764
755
|
te = p
|
765
756
|
p = p - 1; begin @start_columns = te end
|
766
757
|
end
|
767
758
|
when 19 then
|
768
|
-
# line
|
759
|
+
# line 66 "lib/vorax/parser/grammars/alias.rl"
|
769
760
|
begin
|
770
761
|
te = p
|
771
762
|
p = p - 1; begin @columns = data[(@start_columns..ts)] unless @columns end
|
772
763
|
end
|
773
764
|
when 20 then
|
774
|
-
# line
|
765
|
+
# line 67 "lib/vorax/parser/grammars/alias.rl"
|
775
766
|
begin
|
776
767
|
te = p
|
777
768
|
p = p - 1; end
|
778
769
|
when 21 then
|
779
|
-
# line
|
770
|
+
# line 68 "lib/vorax/parser/grammars/alias.rl"
|
780
771
|
begin
|
781
772
|
te = p
|
782
773
|
p = p - 1; end
|
783
774
|
when 22 then
|
784
|
-
# line
|
775
|
+
# line 69 "lib/vorax/parser/grammars/alias.rl"
|
785
776
|
begin
|
786
777
|
te = p
|
787
778
|
p = p - 1; end
|
788
779
|
when 23 then
|
789
|
-
# line
|
780
|
+
# line 66 "lib/vorax/parser/grammars/alias.rl"
|
790
781
|
begin
|
791
782
|
begin p = ((te))-1; end
|
792
783
|
begin @columns = data[(@start_columns..ts)] unless @columns end
|
793
784
|
end
|
794
785
|
when 24 then
|
795
|
-
# line
|
786
|
+
# line 67 "lib/vorax/parser/grammars/alias.rl"
|
796
787
|
begin
|
797
788
|
begin p = ((te))-1; end
|
798
789
|
end
|
799
790
|
when 25 then
|
800
|
-
# line
|
791
|
+
# line 68 "lib/vorax/parser/grammars/alias.rl"
|
801
792
|
begin
|
802
793
|
begin p = ((te))-1; end
|
803
794
|
end
|
804
795
|
when 26 then
|
805
|
-
# line
|
796
|
+
# line 69 "lib/vorax/parser/grammars/alias.rl"
|
806
797
|
begin
|
807
798
|
begin p = ((te))-1; end
|
808
799
|
end
|
@@ -821,7 +812,7 @@ end
|
|
821
812
|
end
|
822
813
|
end
|
823
814
|
end
|
824
|
-
# line
|
815
|
+
# line 816 "lib/vorax/parser/grammars/alias.rb"
|
825
816
|
end # action switch
|
826
817
|
end
|
827
818
|
end
|
@@ -841,7 +832,7 @@ when 8 then
|
|
841
832
|
# line 1 "NONE"
|
842
833
|
begin
|
843
834
|
ts = nil; end
|
844
|
-
# line
|
835
|
+
# line 836 "lib/vorax/parser/grammars/alias.rb"
|
845
836
|
end # to state action switch
|
846
837
|
end
|
847
838
|
if _trigger_goto
|
@@ -868,7 +859,7 @@ end
|
|
868
859
|
end
|
869
860
|
end
|
870
861
|
|
871
|
-
# line
|
862
|
+
# line 97 "lib/vorax/parser/grammars/alias.rl"
|
872
863
|
data.chop!
|
873
864
|
|
874
865
|
# needed to finalize the last pending tableref
|
@@ -3,17 +3,14 @@
|
|
3
3
|
machine alias;
|
4
4
|
|
5
5
|
action tableref_start {
|
6
|
-
#puts "tableref_start: p=#{p}"
|
7
6
|
@t_start = p
|
8
7
|
}
|
9
8
|
|
10
9
|
action tableref_end {
|
11
10
|
@table_ref = data[(@t_start..p-1)]
|
12
|
-
#puts "tableref_end: @table_ref=#@table_ref"
|
13
11
|
}
|
14
12
|
|
15
13
|
action alias_start {
|
16
|
-
#puts "alias_start: p=#{p}"
|
17
14
|
@a_start = p
|
18
15
|
@alias_value = nil
|
19
16
|
}
|
@@ -21,21 +18,17 @@ action alias_start {
|
|
21
18
|
action alias_end {
|
22
19
|
text = data[(@a_start..p-1)]
|
23
20
|
@alias_value = text unless @not_alias.include?(text.upcase)
|
24
|
-
#puts "alias_end: @alias_value=#@alias_value"
|
25
21
|
}
|
26
22
|
|
27
23
|
action subquery_start {
|
28
|
-
#puts "subquery_start: p=#{p}"
|
29
24
|
@subquery_text = Parser.walk_balanced_paren(data[(p..-1)]).gsub(/^\(|\)$/, '')
|
30
25
|
p += 1
|
31
26
|
@subquery_range = (p..p+@subquery_text.length-1)
|
32
27
|
p += @subquery_text.length
|
33
28
|
te = p
|
34
|
-
#puts "subquery_end: p=#{p} @subquery_text=#@subquery_text @subquery_range=#@subquery_range"
|
35
29
|
}
|
36
30
|
|
37
31
|
action before_with {
|
38
|
-
#puts "before_with: p=#{p}"
|
39
32
|
@alias_value = nil
|
40
33
|
@subquery_range = nil
|
41
34
|
@subquery_text = nil
|
@@ -46,11 +39,9 @@ action after_with {
|
|
46
39
|
@alias_value = nil
|
47
40
|
@subquery_range = nil
|
48
41
|
@subquery_text = nil
|
49
|
-
#puts "after_with"
|
50
42
|
}
|
51
43
|
|
52
44
|
action before_tref {
|
53
|
-
#puts "before_tref: p=#{p} @alias_value=#@alias_value @subquery_text=#@subquery_text @subquery_range=#@subquery_range"
|
54
45
|
add_tableref
|
55
46
|
}
|
56
47
|
|
@@ -0,0 +1,413 @@
|
|
1
|
+
|
2
|
+
# line 1 "lib/vorax/parser/grammars/for_block.rl"
|
3
|
+
|
4
|
+
# line 41 "lib/vorax/parser/grammars/for_block.rl"
|
5
|
+
|
6
|
+
|
7
|
+
|
8
|
+
module Vorax
|
9
|
+
|
10
|
+
module Parser
|
11
|
+
|
12
|
+
def self.describe_for(data)
|
13
|
+
@cursor_var = nil
|
14
|
+
@for_var = nil
|
15
|
+
@expr = nil
|
16
|
+
@end_pos = -1
|
17
|
+
if data
|
18
|
+
eof = data.length
|
19
|
+
|
20
|
+
# line 21 "lib/vorax/parser/grammars/for_block.rb"
|
21
|
+
class << self
|
22
|
+
attr_accessor :_for_block_actions
|
23
|
+
private :_for_block_actions, :_for_block_actions=
|
24
|
+
end
|
25
|
+
self._for_block_actions = [
|
26
|
+
0, 1, 0, 1, 1, 1, 4, 2,
|
27
|
+
5, 2, 2, 5, 3
|
28
|
+
]
|
29
|
+
|
30
|
+
class << self
|
31
|
+
attr_accessor :_for_block_key_offsets
|
32
|
+
private :_for_block_key_offsets, :_for_block_key_offsets=
|
33
|
+
end
|
34
|
+
self._for_block_key_offsets = [
|
35
|
+
0, 0, 2, 4, 6, 11, 24, 25,
|
36
|
+
30, 37, 38, 39, 40, 41, 43, 45,
|
37
|
+
51, 69, 70, 75, 82, 83, 84, 85,
|
38
|
+
86, 88, 90, 92, 94, 99, 100, 101,
|
39
|
+
102, 103, 105, 119, 120, 121, 122, 123,
|
40
|
+
125, 133, 139, 140, 141, 142, 149, 150,
|
41
|
+
151, 152, 153, 155, 162, 163, 164, 166,
|
42
|
+
182, 198, 214, 230, 246, 262, 276, 283,
|
43
|
+
284, 285, 286, 287, 289, 303, 304, 305,
|
44
|
+
306, 307, 309
|
45
|
+
]
|
46
|
+
|
47
|
+
class << self
|
48
|
+
attr_accessor :_for_block_trans_keys
|
49
|
+
private :_for_block_trans_keys, :_for_block_trans_keys=
|
50
|
+
end
|
51
|
+
self._for_block_trans_keys = [
|
52
|
+
70, 102, 79, 111, 82, 114, 32, 45,
|
53
|
+
47, 9, 13, 32, 34, 45, 47, 95,
|
54
|
+
9, 13, 35, 36, 65, 90, 97, 122,
|
55
|
+
34, 32, 45, 47, 9, 13, 32, 45,
|
56
|
+
47, 73, 105, 9, 13, 45, 10, 42,
|
57
|
+
42, 42, 47, 78, 110, 32, 40, 45,
|
58
|
+
47, 9, 13, 32, 34, 40, 45, 47,
|
59
|
+
82, 95, 114, 9, 13, 35, 36, 48,
|
60
|
+
57, 65, 90, 97, 122, 34, 32, 45,
|
61
|
+
47, 9, 13, 32, 45, 47, 76, 108,
|
62
|
+
9, 13, 45, 10, 42, 42, 42, 47,
|
63
|
+
79, 111, 79, 111, 80, 112, 32, 45,
|
64
|
+
47, 9, 13, 45, 10, 42, 42, 42,
|
65
|
+
47, 32, 45, 47, 95, 9, 13, 35,
|
66
|
+
36, 48, 57, 65, 90, 97, 122, 45,
|
67
|
+
10, 42, 42, 42, 47, 32, 45, 46,
|
68
|
+
47, 9, 13, 48, 57, 32, 45, 46,
|
69
|
+
47, 9, 13, 45, 10, 46, 32, 45,
|
70
|
+
47, 9, 13, 48, 57, 45, 10, 42,
|
71
|
+
42, 42, 47, 32, 45, 47, 9, 13,
|
72
|
+
48, 57, 42, 42, 42, 47, 32, 45,
|
73
|
+
47, 69, 95, 101, 9, 13, 35, 36,
|
74
|
+
48, 57, 65, 90, 97, 122, 32, 45,
|
75
|
+
47, 86, 95, 118, 9, 13, 35, 36,
|
76
|
+
48, 57, 65, 90, 97, 122, 32, 45,
|
77
|
+
47, 69, 95, 101, 9, 13, 35, 36,
|
78
|
+
48, 57, 65, 90, 97, 122, 32, 45,
|
79
|
+
47, 82, 95, 114, 9, 13, 35, 36,
|
80
|
+
48, 57, 65, 90, 97, 122, 32, 45,
|
81
|
+
47, 83, 95, 115, 9, 13, 35, 36,
|
82
|
+
48, 57, 65, 90, 97, 122, 32, 45,
|
83
|
+
47, 69, 95, 101, 9, 13, 35, 36,
|
84
|
+
48, 57, 65, 90, 97, 122, 32, 45,
|
85
|
+
47, 95, 9, 13, 35, 36, 48, 57,
|
86
|
+
65, 90, 97, 122, 32, 45, 47, 9,
|
87
|
+
13, 48, 57, 45, 10, 42, 42, 42,
|
88
|
+
47, 32, 45, 47, 95, 9, 13, 35,
|
89
|
+
36, 48, 57, 65, 90, 97, 122, 45,
|
90
|
+
10, 42, 42, 42, 47, 32, 45, 47,
|
91
|
+
9, 13, 0
|
92
|
+
]
|
93
|
+
|
94
|
+
class << self
|
95
|
+
attr_accessor :_for_block_single_lengths
|
96
|
+
private :_for_block_single_lengths, :_for_block_single_lengths=
|
97
|
+
end
|
98
|
+
self._for_block_single_lengths = [
|
99
|
+
0, 2, 2, 2, 3, 5, 1, 3,
|
100
|
+
5, 1, 1, 1, 1, 2, 2, 4,
|
101
|
+
8, 1, 3, 5, 1, 1, 1, 1,
|
102
|
+
2, 2, 2, 2, 3, 1, 1, 1,
|
103
|
+
1, 2, 4, 1, 1, 1, 1, 2,
|
104
|
+
4, 4, 1, 1, 1, 3, 1, 1,
|
105
|
+
1, 1, 2, 3, 1, 1, 2, 6,
|
106
|
+
6, 6, 6, 6, 6, 4, 3, 1,
|
107
|
+
1, 1, 1, 2, 4, 1, 1, 1,
|
108
|
+
1, 2, 3
|
109
|
+
]
|
110
|
+
|
111
|
+
class << self
|
112
|
+
attr_accessor :_for_block_range_lengths
|
113
|
+
private :_for_block_range_lengths, :_for_block_range_lengths=
|
114
|
+
end
|
115
|
+
self._for_block_range_lengths = [
|
116
|
+
0, 0, 0, 0, 1, 4, 0, 1,
|
117
|
+
1, 0, 0, 0, 0, 0, 0, 1,
|
118
|
+
5, 0, 1, 1, 0, 0, 0, 0,
|
119
|
+
0, 0, 0, 0, 1, 0, 0, 0,
|
120
|
+
0, 0, 5, 0, 0, 0, 0, 0,
|
121
|
+
2, 1, 0, 0, 0, 2, 0, 0,
|
122
|
+
0, 0, 0, 2, 0, 0, 0, 5,
|
123
|
+
5, 5, 5, 5, 5, 5, 2, 0,
|
124
|
+
0, 0, 0, 0, 5, 0, 0, 0,
|
125
|
+
0, 0, 1
|
126
|
+
]
|
127
|
+
|
128
|
+
class << self
|
129
|
+
attr_accessor :_for_block_index_offsets
|
130
|
+
private :_for_block_index_offsets, :_for_block_index_offsets=
|
131
|
+
end
|
132
|
+
self._for_block_index_offsets = [
|
133
|
+
0, 0, 3, 6, 9, 14, 24, 26,
|
134
|
+
31, 38, 40, 42, 44, 46, 49, 52,
|
135
|
+
58, 72, 74, 79, 86, 88, 90, 92,
|
136
|
+
94, 97, 100, 103, 106, 111, 113, 115,
|
137
|
+
117, 119, 122, 132, 134, 136, 138, 140,
|
138
|
+
143, 150, 156, 158, 160, 162, 168, 170,
|
139
|
+
172, 174, 176, 179, 185, 187, 189, 192,
|
140
|
+
204, 216, 228, 240, 252, 264, 274, 280,
|
141
|
+
282, 284, 286, 288, 291, 301, 303, 305,
|
142
|
+
307, 309, 312
|
143
|
+
]
|
144
|
+
|
145
|
+
class << self
|
146
|
+
attr_accessor :_for_block_indicies
|
147
|
+
private :_for_block_indicies, :_for_block_indicies=
|
148
|
+
end
|
149
|
+
self._for_block_indicies = [
|
150
|
+
0, 0, 1, 2, 2, 1, 3, 3,
|
151
|
+
1, 4, 5, 6, 4, 1, 4, 7,
|
152
|
+
5, 6, 8, 4, 8, 8, 8, 1,
|
153
|
+
10, 9, 11, 12, 13, 11, 1, 14,
|
154
|
+
15, 16, 17, 17, 14, 1, 18, 1,
|
155
|
+
14, 18, 19, 1, 20, 19, 20, 14,
|
156
|
+
19, 21, 21, 1, 22, 23, 24, 25,
|
157
|
+
22, 1, 22, 26, 23, 24, 25, 29,
|
158
|
+
27, 29, 22, 27, 28, 27, 27, 1,
|
159
|
+
31, 30, 32, 33, 34, 32, 1, 35,
|
160
|
+
36, 37, 38, 38, 35, 1, 39, 1,
|
161
|
+
35, 39, 40, 1, 41, 40, 41, 35,
|
162
|
+
40, 42, 42, 1, 43, 43, 1, 44,
|
163
|
+
44, 1, 45, 46, 47, 45, 1, 48,
|
164
|
+
1, 45, 48, 49, 1, 50, 49, 50,
|
165
|
+
45, 49, 32, 33, 34, 51, 32, 51,
|
166
|
+
51, 51, 51, 1, 52, 1, 22, 52,
|
167
|
+
53, 1, 54, 53, 54, 22, 53, 55,
|
168
|
+
56, 57, 58, 55, 28, 1, 55, 56,
|
169
|
+
57, 58, 55, 1, 59, 1, 55, 59,
|
170
|
+
60, 1, 60, 61, 62, 60, 63, 1,
|
171
|
+
64, 1, 60, 64, 65, 1, 66, 65,
|
172
|
+
66, 60, 65, 35, 36, 37, 35, 63,
|
173
|
+
1, 67, 1, 68, 67, 68, 55, 67,
|
174
|
+
32, 33, 34, 69, 51, 69, 32, 51,
|
175
|
+
51, 51, 51, 1, 32, 33, 34, 70,
|
176
|
+
51, 70, 32, 51, 51, 51, 51, 1,
|
177
|
+
32, 33, 34, 71, 51, 71, 32, 51,
|
178
|
+
51, 51, 51, 1, 32, 33, 34, 72,
|
179
|
+
51, 72, 32, 51, 51, 51, 51, 1,
|
180
|
+
32, 33, 34, 73, 51, 73, 32, 51,
|
181
|
+
51, 51, 51, 1, 32, 33, 34, 74,
|
182
|
+
51, 74, 32, 51, 51, 51, 51, 1,
|
183
|
+
75, 76, 77, 51, 75, 51, 51, 51,
|
184
|
+
51, 1, 75, 76, 77, 75, 28, 1,
|
185
|
+
78, 1, 75, 78, 79, 1, 80, 79,
|
186
|
+
80, 75, 79, 11, 12, 13, 81, 11,
|
187
|
+
81, 81, 81, 81, 1, 82, 1, 4,
|
188
|
+
82, 83, 1, 84, 83, 84, 4, 83,
|
189
|
+
45, 46, 47, 45, 1, 0
|
190
|
+
]
|
191
|
+
|
192
|
+
class << self
|
193
|
+
attr_accessor :_for_block_trans_targs
|
194
|
+
private :_for_block_trans_targs, :_for_block_trans_targs=
|
195
|
+
end
|
196
|
+
self._for_block_trans_targs = [
|
197
|
+
2, 0, 3, 4, 5, 69, 71, 6,
|
198
|
+
68, 6, 7, 8, 9, 11, 8, 9,
|
199
|
+
11, 14, 10, 12, 13, 15, 16, 19,
|
200
|
+
35, 37, 17, 34, 40, 55, 17, 18,
|
201
|
+
19, 20, 22, 19, 20, 22, 25, 21,
|
202
|
+
23, 24, 26, 27, 28, 74, 29, 31,
|
203
|
+
30, 32, 33, 34, 36, 38, 39, 41,
|
204
|
+
42, 44, 52, 43, 45, 46, 48, 51,
|
205
|
+
47, 49, 50, 53, 54, 56, 57, 58,
|
206
|
+
59, 60, 61, 62, 63, 65, 64, 66,
|
207
|
+
67, 68, 70, 72, 73
|
208
|
+
]
|
209
|
+
|
210
|
+
class << self
|
211
|
+
attr_accessor :_for_block_trans_actions
|
212
|
+
private :_for_block_trans_actions, :_for_block_trans_actions=
|
213
|
+
end
|
214
|
+
self._for_block_trans_actions = [
|
215
|
+
0, 0, 0, 0, 0, 0, 0, 5,
|
216
|
+
5, 0, 0, 7, 7, 7, 0, 0,
|
217
|
+
0, 0, 0, 0, 0, 0, 0, 1,
|
218
|
+
0, 0, 5, 5, 0, 5, 0, 0,
|
219
|
+
10, 10, 10, 0, 0, 0, 0, 0,
|
220
|
+
0, 0, 0, 0, 0, 3, 0, 0,
|
221
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
222
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
223
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
224
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
225
|
+
0, 0, 0, 0, 0
|
226
|
+
]
|
227
|
+
|
228
|
+
class << self
|
229
|
+
attr_accessor :for_block_start
|
230
|
+
end
|
231
|
+
self.for_block_start = 1;
|
232
|
+
class << self
|
233
|
+
attr_accessor :for_block_first_final
|
234
|
+
end
|
235
|
+
self.for_block_first_final = 74;
|
236
|
+
class << self
|
237
|
+
attr_accessor :for_block_error
|
238
|
+
end
|
239
|
+
self.for_block_error = 0;
|
240
|
+
|
241
|
+
class << self
|
242
|
+
attr_accessor :for_block_en_for_stmt
|
243
|
+
end
|
244
|
+
self.for_block_en_for_stmt = 1;
|
245
|
+
|
246
|
+
|
247
|
+
# line 56 "lib/vorax/parser/grammars/for_block.rl"
|
248
|
+
|
249
|
+
# line 250 "lib/vorax/parser/grammars/for_block.rb"
|
250
|
+
begin
|
251
|
+
p ||= 0
|
252
|
+
pe ||= data.length
|
253
|
+
cs = for_block_start
|
254
|
+
end
|
255
|
+
|
256
|
+
# line 57 "lib/vorax/parser/grammars/for_block.rl"
|
257
|
+
|
258
|
+
# line 259 "lib/vorax/parser/grammars/for_block.rb"
|
259
|
+
begin
|
260
|
+
_klen, _trans, _keys, _acts, _nacts = nil
|
261
|
+
_goto_level = 0
|
262
|
+
_resume = 10
|
263
|
+
_eof_trans = 15
|
264
|
+
_again = 20
|
265
|
+
_test_eof = 30
|
266
|
+
_out = 40
|
267
|
+
while true
|
268
|
+
_trigger_goto = false
|
269
|
+
if _goto_level <= 0
|
270
|
+
if p == pe
|
271
|
+
_goto_level = _test_eof
|
272
|
+
next
|
273
|
+
end
|
274
|
+
if cs == 0
|
275
|
+
_goto_level = _out
|
276
|
+
next
|
277
|
+
end
|
278
|
+
end
|
279
|
+
if _goto_level <= _resume
|
280
|
+
_keys = _for_block_key_offsets[cs]
|
281
|
+
_trans = _for_block_index_offsets[cs]
|
282
|
+
_klen = _for_block_single_lengths[cs]
|
283
|
+
_break_match = false
|
284
|
+
|
285
|
+
begin
|
286
|
+
if _klen > 0
|
287
|
+
_lower = _keys
|
288
|
+
_upper = _keys + _klen - 1
|
289
|
+
|
290
|
+
loop do
|
291
|
+
break if _upper < _lower
|
292
|
+
_mid = _lower + ( (_upper - _lower) >> 1 )
|
293
|
+
|
294
|
+
if data[p].ord < _for_block_trans_keys[_mid]
|
295
|
+
_upper = _mid - 1
|
296
|
+
elsif data[p].ord > _for_block_trans_keys[_mid]
|
297
|
+
_lower = _mid + 1
|
298
|
+
else
|
299
|
+
_trans += (_mid - _keys)
|
300
|
+
_break_match = true
|
301
|
+
break
|
302
|
+
end
|
303
|
+
end # loop
|
304
|
+
break if _break_match
|
305
|
+
_keys += _klen
|
306
|
+
_trans += _klen
|
307
|
+
end
|
308
|
+
_klen = _for_block_range_lengths[cs]
|
309
|
+
if _klen > 0
|
310
|
+
_lower = _keys
|
311
|
+
_upper = _keys + (_klen << 1) - 2
|
312
|
+
loop do
|
313
|
+
break if _upper < _lower
|
314
|
+
_mid = _lower + (((_upper-_lower) >> 1) & ~1)
|
315
|
+
if data[p].ord < _for_block_trans_keys[_mid]
|
316
|
+
_upper = _mid - 2
|
317
|
+
elsif data[p].ord > _for_block_trans_keys[_mid+1]
|
318
|
+
_lower = _mid + 2
|
319
|
+
else
|
320
|
+
_trans += ((_mid - _keys) >> 1)
|
321
|
+
_break_match = true
|
322
|
+
break
|
323
|
+
end
|
324
|
+
end # loop
|
325
|
+
break if _break_match
|
326
|
+
_trans += _klen
|
327
|
+
end
|
328
|
+
end while false
|
329
|
+
_trans = _for_block_indicies[_trans]
|
330
|
+
cs = _for_block_trans_targs[_trans]
|
331
|
+
if _for_block_trans_actions[_trans] != 0
|
332
|
+
_acts = _for_block_trans_actions[_trans]
|
333
|
+
_nacts = _for_block_actions[_acts]
|
334
|
+
_acts += 1
|
335
|
+
while _nacts > 0
|
336
|
+
_nacts -= 1
|
337
|
+
_acts += 1
|
338
|
+
case _for_block_actions[_acts - 1]
|
339
|
+
when 0 then
|
340
|
+
# line 7 "lib/vorax/parser/grammars/for_block.rl"
|
341
|
+
begin
|
342
|
+
|
343
|
+
@expr = Parser.walk_balanced_paren(data[(p..-1)])
|
344
|
+
p += @expr.length - 1
|
345
|
+
end
|
346
|
+
when 1 then
|
347
|
+
# line 12 "lib/vorax/parser/grammars/for_block.rl"
|
348
|
+
begin
|
349
|
+
|
350
|
+
@end_pos = p
|
351
|
+
end
|
352
|
+
when 2 then
|
353
|
+
# line 16 "lib/vorax/parser/grammars/for_block.rl"
|
354
|
+
begin
|
355
|
+
|
356
|
+
@for_var = data[(@start..@end)]
|
357
|
+
end
|
358
|
+
when 3 then
|
359
|
+
# line 20 "lib/vorax/parser/grammars/for_block.rl"
|
360
|
+
begin
|
361
|
+
|
362
|
+
@cursor_var = data[(@start..@end)]
|
363
|
+
end
|
364
|
+
when 4 then
|
365
|
+
# line 24 "lib/vorax/parser/grammars/for_block.rl"
|
366
|
+
begin
|
367
|
+
|
368
|
+
@start = p
|
369
|
+
end
|
370
|
+
when 5 then
|
371
|
+
# line 28 "lib/vorax/parser/grammars/for_block.rl"
|
372
|
+
begin
|
373
|
+
|
374
|
+
@end = p - 1
|
375
|
+
end
|
376
|
+
# line 377 "lib/vorax/parser/grammars/for_block.rb"
|
377
|
+
end # action switch
|
378
|
+
end
|
379
|
+
end
|
380
|
+
if _trigger_goto
|
381
|
+
next
|
382
|
+
end
|
383
|
+
end
|
384
|
+
if _goto_level <= _again
|
385
|
+
if cs == 0
|
386
|
+
_goto_level = _out
|
387
|
+
next
|
388
|
+
end
|
389
|
+
p += 1
|
390
|
+
if p != pe
|
391
|
+
_goto_level = _resume
|
392
|
+
next
|
393
|
+
end
|
394
|
+
end
|
395
|
+
if _goto_level <= _test_eof
|
396
|
+
end
|
397
|
+
if _goto_level <= _out
|
398
|
+
break
|
399
|
+
end
|
400
|
+
end
|
401
|
+
end
|
402
|
+
|
403
|
+
# line 58 "lib/vorax/parser/grammars/for_block.rl"
|
404
|
+
end
|
405
|
+
return {:cursor_var => @cursor_var,
|
406
|
+
:for_var => @for_var,
|
407
|
+
:expr => @expr,
|
408
|
+
:end_pos => @end_pos}
|
409
|
+
end
|
410
|
+
|
411
|
+
end
|
412
|
+
|
413
|
+
end
|