less 1.0.14 → 1.0.15
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/Rakefile +1 -1
- data/VERSION +1 -1
- data/less.gemspec +1 -1
- data/lib/less/engine/parser.rb +68 -68
- data/lib/vendor/treetop/lib/treetop/compiler/node_classes/character_class.rb +8 -7
- data/lib/vendor/treetop/lib/treetop/compiler/node_classes/parsing_expression.rb +0 -8
- data/lib/vendor/treetop/lib/treetop/runtime/compiled_parser.rb +12 -16
- data/lib/vendor/treetop/lib/treetop/runtime/syntax_node.rb +2 -20
- data/lib/vendor/treetop/lib/treetop/version.rb +2 -2
- data/lib/vendor/treetop/spec/compiler/character_class_spec.rb +0 -65
- data/lib/vendor/treetop/spec/runtime/syntax_node_spec.rb +0 -15
- data/lib/vendor/treetop/treetop.gemspec +1 -1
- metadata +1 -1
data/Rakefile
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.0.
|
1
|
+
1.0.15
|
data/less.gemspec
CHANGED
data/lib/less/engine/parser.rb
CHANGED
@@ -622,8 +622,8 @@ module Less
|
|
622
622
|
else
|
623
623
|
s4, i4 = [], index
|
624
624
|
loop do
|
625
|
-
if has_terminal?('[-a-zA-Z0-9_%$/.&=:;#+?]', true, index)
|
626
|
-
r5 =
|
625
|
+
if has_terminal?('\G[-a-zA-Z0-9_%$/.&=:;#+?]', true, index)
|
626
|
+
r5 = instantiate_node(SyntaxNode,input, index...(index + 1))
|
627
627
|
@index += 1
|
628
628
|
else
|
629
629
|
r5 = nil
|
@@ -698,8 +698,8 @@ module Less
|
|
698
698
|
i0, s0 = index, []
|
699
699
|
s1, i1 = [], index
|
700
700
|
loop do
|
701
|
-
if has_terminal?('[-a-z]', true, index)
|
702
|
-
r2 =
|
701
|
+
if has_terminal?('\G[-a-z]', true, index)
|
702
|
+
r2 = instantiate_node(SyntaxNode,input, index...(index + 1))
|
703
703
|
@index += 1
|
704
704
|
else
|
705
705
|
r2 = nil
|
@@ -738,8 +738,8 @@ module Less
|
|
738
738
|
if r7
|
739
739
|
s8, i8 = [], index
|
740
740
|
loop do
|
741
|
-
if has_terminal?('[a-z]', true, index)
|
742
|
-
r9 =
|
741
|
+
if has_terminal?('\G[a-z]', true, index)
|
742
|
+
r9 = instantiate_node(SyntaxNode,input, index...(index + 1))
|
743
743
|
@index += 1
|
744
744
|
else
|
745
745
|
r9 = nil
|
@@ -1509,8 +1509,8 @@ module Less
|
|
1509
1509
|
|
1510
1510
|
i0 = index
|
1511
1511
|
i1, s1 = index, []
|
1512
|
-
if has_terminal?('[a-zA-Z]', true, index)
|
1513
|
-
r2 =
|
1512
|
+
if has_terminal?('\G[a-zA-Z]', true, index)
|
1513
|
+
r2 = instantiate_node(SyntaxNode,input, index...(index + 1))
|
1514
1514
|
@index += 1
|
1515
1515
|
else
|
1516
1516
|
r2 = nil
|
@@ -1519,8 +1519,8 @@ module Less
|
|
1519
1519
|
if r2
|
1520
1520
|
s3, i3 = [], index
|
1521
1521
|
loop do
|
1522
|
-
if has_terminal?('[-a-zA-Z0-9]', true, index)
|
1523
|
-
r4 =
|
1522
|
+
if has_terminal?('\G[-a-zA-Z0-9]', true, index)
|
1523
|
+
r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
|
1524
1524
|
@index += 1
|
1525
1525
|
else
|
1526
1526
|
r4 = nil
|
@@ -1602,8 +1602,8 @@ module Less
|
|
1602
1602
|
if r3
|
1603
1603
|
s5, i5 = [], index
|
1604
1604
|
loop do
|
1605
|
-
if has_terminal?('[-a-z0-9_]', true, index)
|
1606
|
-
r6 =
|
1605
|
+
if has_terminal?('\G[-a-z0-9_]', true, index)
|
1606
|
+
r6 = instantiate_node(SyntaxNode,input, index...(index + 1))
|
1607
1607
|
@index += 1
|
1608
1608
|
else
|
1609
1609
|
r6 = nil
|
@@ -1665,8 +1665,8 @@ module Less
|
|
1665
1665
|
if r1
|
1666
1666
|
s2, i2 = [], index
|
1667
1667
|
loop do
|
1668
|
-
if has_terminal?('[-a-zA-Z0-9_]', true, index)
|
1669
|
-
r3 =
|
1668
|
+
if has_terminal?('\G[-a-zA-Z0-9_]', true, index)
|
1669
|
+
r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
|
1670
1670
|
@index += 1
|
1671
1671
|
else
|
1672
1672
|
r3 = nil
|
@@ -1961,8 +1961,8 @@ module Less
|
|
1961
1961
|
s1 << r3
|
1962
1962
|
if r3
|
1963
1963
|
i4, s4 = index, []
|
1964
|
-
if has_terminal?('[|~*$^]', true, index)
|
1965
|
-
r6 =
|
1964
|
+
if has_terminal?('\G[|~*$^]', true, index)
|
1965
|
+
r6 = instantiate_node(SyntaxNode,input, index...(index + 1))
|
1966
1966
|
@index += 1
|
1967
1967
|
else
|
1968
1968
|
r6 = nil
|
@@ -2105,8 +2105,8 @@ module Less
|
|
2105
2105
|
end
|
2106
2106
|
s0 << r1
|
2107
2107
|
if r1
|
2108
|
-
if has_terminal?('[_a-z]', true, index)
|
2109
|
-
r2 =
|
2108
|
+
if has_terminal?('\G[_a-z]', true, index)
|
2109
|
+
r2 = instantiate_node(SyntaxNode,input, index...(index + 1))
|
2110
2110
|
@index += 1
|
2111
2111
|
else
|
2112
2112
|
r2 = nil
|
@@ -2115,8 +2115,8 @@ module Less
|
|
2115
2115
|
if r2
|
2116
2116
|
s3, i3 = [], index
|
2117
2117
|
loop do
|
2118
|
-
if has_terminal?('[-a-zA-Z0-9_]', true, index)
|
2119
|
-
r4 =
|
2118
|
+
if has_terminal?('\G[-a-zA-Z0-9_]', true, index)
|
2119
|
+
r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
|
2120
2120
|
@index += 1
|
2121
2121
|
else
|
2122
2122
|
r4 = nil
|
@@ -2165,8 +2165,8 @@ module Less
|
|
2165
2165
|
end
|
2166
2166
|
s0 << r1
|
2167
2167
|
if r1
|
2168
|
-
if has_terminal?('[_a-z]', true, index)
|
2169
|
-
r2 =
|
2168
|
+
if has_terminal?('\G[_a-z]', true, index)
|
2169
|
+
r2 = instantiate_node(SyntaxNode,input, index...(index + 1))
|
2170
2170
|
@index += 1
|
2171
2171
|
else
|
2172
2172
|
r2 = nil
|
@@ -2175,8 +2175,8 @@ module Less
|
|
2175
2175
|
if r2
|
2176
2176
|
s3, i3 = [], index
|
2177
2177
|
loop do
|
2178
|
-
if has_terminal?('[-a-zA-Z0-9_]', true, index)
|
2179
|
-
r4 =
|
2178
|
+
if has_terminal?('\G[-a-zA-Z0-9_]', true, index)
|
2179
|
+
r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
|
2180
2180
|
@index += 1
|
2181
2181
|
else
|
2182
2182
|
r4 = nil
|
@@ -2217,8 +2217,8 @@ module Less
|
|
2217
2217
|
|
2218
2218
|
i0 = index
|
2219
2219
|
i1, s1 = index, []
|
2220
|
-
if has_terminal?('[a-zA-Z]', true, index)
|
2221
|
-
r2 =
|
2220
|
+
if has_terminal?('\G[a-zA-Z]', true, index)
|
2221
|
+
r2 = instantiate_node(SyntaxNode,input, index...(index + 1))
|
2222
2222
|
@index += 1
|
2223
2223
|
else
|
2224
2224
|
r2 = nil
|
@@ -2227,8 +2227,8 @@ module Less
|
|
2227
2227
|
if r2
|
2228
2228
|
s3, i3 = [], index
|
2229
2229
|
loop do
|
2230
|
-
if has_terminal?('[-a-zA-Z]', true, index)
|
2231
|
-
r4 =
|
2230
|
+
if has_terminal?('\G[-a-zA-Z]', true, index)
|
2231
|
+
r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
|
2232
2232
|
@index += 1
|
2233
2233
|
else
|
2234
2234
|
r4 = nil
|
@@ -2242,8 +2242,8 @@ module Less
|
|
2242
2242
|
r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
|
2243
2243
|
s1 << r3
|
2244
2244
|
if r3
|
2245
|
-
if has_terminal?('[0-9]', true, index)
|
2246
|
-
r6 =
|
2245
|
+
if has_terminal?('\G[0-9]', true, index)
|
2246
|
+
r6 = instantiate_node(SyntaxNode,input, index...(index + 1))
|
2247
2247
|
@index += 1
|
2248
2248
|
else
|
2249
2249
|
r6 = nil
|
@@ -2316,8 +2316,8 @@ module Less
|
|
2316
2316
|
r3 = _nt_s
|
2317
2317
|
s2 << r3
|
2318
2318
|
if r3
|
2319
|
-
if has_terminal?('[+>~]', true, index)
|
2320
|
-
r4 =
|
2319
|
+
if has_terminal?('\G[+>~]', true, index)
|
2320
|
+
r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
|
2321
2321
|
@index += 1
|
2322
2322
|
else
|
2323
2323
|
r4 = nil
|
@@ -2506,8 +2506,8 @@ module Less
|
|
2506
2506
|
r2 = _nt_S
|
2507
2507
|
s1 << r2
|
2508
2508
|
if r2
|
2509
|
-
if has_terminal?('[-+*/]', true, index)
|
2510
|
-
r3 =
|
2509
|
+
if has_terminal?('\G[-+*/]', true, index)
|
2510
|
+
r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
|
2511
2511
|
@index += 1
|
2512
2512
|
else
|
2513
2513
|
r3 = nil
|
@@ -2529,7 +2529,7 @@ module Less
|
|
2529
2529
|
if r1
|
2530
2530
|
r0 = r1
|
2531
2531
|
else
|
2532
|
-
if has_terminal?('[-+*/]', true, index)
|
2532
|
+
if has_terminal?('\G[-+*/]', true, index)
|
2533
2533
|
r5 = instantiate_node(SyntaxNode,input, index...(index + 1))
|
2534
2534
|
r5.extend(Operator2)
|
2535
2535
|
@index += 1
|
@@ -2604,8 +2604,8 @@ module Less
|
|
2604
2604
|
else
|
2605
2605
|
s5, i5 = [], index
|
2606
2606
|
loop do
|
2607
|
-
if has_terminal?('[-a-z]', true, index)
|
2608
|
-
r6 =
|
2607
|
+
if has_terminal?('\G[-a-z]', true, index)
|
2608
|
+
r6 = instantiate_node(SyntaxNode,input, index...(index + 1))
|
2609
2609
|
@index += 1
|
2610
2610
|
else
|
2611
2611
|
r6 = nil
|
@@ -2738,8 +2738,8 @@ module Less
|
|
2738
2738
|
i0, s0 = index, []
|
2739
2739
|
s1, i1 = [], index
|
2740
2740
|
loop do
|
2741
|
-
if has_terminal?('[-a-zA-Z]', true, index)
|
2742
|
-
r2 =
|
2741
|
+
if has_terminal?('\G[-a-zA-Z]', true, index)
|
2742
|
+
r2 = instantiate_node(SyntaxNode,input, index...(index + 1))
|
2743
2743
|
@index += 1
|
2744
2744
|
else
|
2745
2745
|
r2 = nil
|
@@ -2899,8 +2899,8 @@ module Less
|
|
2899
2899
|
r0 = r1
|
2900
2900
|
else
|
2901
2901
|
i9, s9 = index, []
|
2902
|
-
if has_terminal?('["]', true, index)
|
2903
|
-
r10 =
|
2902
|
+
if has_terminal?('\G["]', true, index)
|
2903
|
+
r10 = instantiate_node(SyntaxNode,input, index...(index + 1))
|
2904
2904
|
@index += 1
|
2905
2905
|
else
|
2906
2906
|
r10 = nil
|
@@ -2911,8 +2911,8 @@ module Less
|
|
2911
2911
|
loop do
|
2912
2912
|
i12, s12 = index, []
|
2913
2913
|
i13 = index
|
2914
|
-
if has_terminal?('["]', true, index)
|
2915
|
-
r14 =
|
2914
|
+
if has_terminal?('\G["]', true, index)
|
2915
|
+
r14 = instantiate_node(SyntaxNode,input, index...(index + 1))
|
2916
2916
|
@index += 1
|
2917
2917
|
else
|
2918
2918
|
r14 = nil
|
@@ -2950,8 +2950,8 @@ module Less
|
|
2950
2950
|
r11 = instantiate_node(SyntaxNode,input, i11...index, s11)
|
2951
2951
|
s9 << r11
|
2952
2952
|
if r11
|
2953
|
-
if has_terminal?('["]', true, index)
|
2954
|
-
r16 =
|
2953
|
+
if has_terminal?('\G["]', true, index)
|
2954
|
+
r16 = instantiate_node(SyntaxNode,input, index...(index + 1))
|
2955
2955
|
@index += 1
|
2956
2956
|
else
|
2957
2957
|
r16 = nil
|
@@ -3050,8 +3050,8 @@ module Less
|
|
3050
3050
|
if r2
|
3051
3051
|
s4, i4 = [], index
|
3052
3052
|
loop do
|
3053
|
-
if has_terminal?('[0-9]', true, index)
|
3054
|
-
r5 =
|
3053
|
+
if has_terminal?('\G[0-9]', true, index)
|
3054
|
+
r5 = instantiate_node(SyntaxNode,input, index...(index + 1))
|
3055
3055
|
@index += 1
|
3056
3056
|
else
|
3057
3057
|
r5 = nil
|
@@ -3076,8 +3076,8 @@ module Less
|
|
3076
3076
|
if r6
|
3077
3077
|
s7, i7 = [], index
|
3078
3078
|
loop do
|
3079
|
-
if has_terminal?('[0-9]', true, index)
|
3080
|
-
r8 =
|
3079
|
+
if has_terminal?('\G[0-9]', true, index)
|
3080
|
+
r8 = instantiate_node(SyntaxNode,input, index...(index + 1))
|
3081
3081
|
@index += 1
|
3082
3082
|
else
|
3083
3083
|
r8 = nil
|
@@ -3125,8 +3125,8 @@ module Less
|
|
3125
3125
|
if r10
|
3126
3126
|
s12, i12 = [], index
|
3127
3127
|
loop do
|
3128
|
-
if has_terminal?('[0-9]', true, index)
|
3129
|
-
r13 =
|
3128
|
+
if has_terminal?('\G[0-9]', true, index)
|
3129
|
+
r13 = instantiate_node(SyntaxNode,input, index...(index + 1))
|
3130
3130
|
@index += 1
|
3131
3131
|
else
|
3132
3132
|
r13 = nil
|
@@ -3584,7 +3584,7 @@ module Less
|
|
3584
3584
|
return cached
|
3585
3585
|
end
|
3586
3586
|
|
3587
|
-
if has_terminal?('[a-fA-F0-9]', true, index)
|
3587
|
+
if has_terminal?('\G[a-fA-F0-9]', true, index)
|
3588
3588
|
r0 = instantiate_node(SyntaxNode,input, index...(index + 1))
|
3589
3589
|
@index += 1
|
3590
3590
|
else
|
@@ -3623,8 +3623,8 @@ module Less
|
|
3623
3623
|
i0, s0 = index, []
|
3624
3624
|
s1, i1 = [], index
|
3625
3625
|
loop do
|
3626
|
-
if has_terminal?('[-a-zA-Z_]', true, index)
|
3627
|
-
r2 =
|
3626
|
+
if has_terminal?('\G[-a-zA-Z_]', true, index)
|
3627
|
+
r2 = instantiate_node(SyntaxNode,input, index...(index + 1))
|
3628
3628
|
@index += 1
|
3629
3629
|
else
|
3630
3630
|
r2 = nil
|
@@ -3884,8 +3884,8 @@ module Less
|
|
3884
3884
|
i6, s6 = index, []
|
3885
3885
|
s7, i7 = [], index
|
3886
3886
|
loop do
|
3887
|
-
if has_terminal?('[a-zA-Z]', true, index)
|
3888
|
-
r8 =
|
3887
|
+
if has_terminal?('\G[a-zA-Z]', true, index)
|
3888
|
+
r8 = instantiate_node(SyntaxNode,input, index...(index + 1))
|
3889
3889
|
@index += 1
|
3890
3890
|
else
|
3891
3891
|
r8 = nil
|
@@ -3930,8 +3930,8 @@ module Less
|
|
3930
3930
|
else
|
3931
3931
|
s11, i11 = [], index
|
3932
3932
|
loop do
|
3933
|
-
if has_terminal?('[-a-zA-Z0-9_%$/.&=:;#+?]', true, index)
|
3934
|
-
r12 =
|
3933
|
+
if has_terminal?('\G[-a-zA-Z0-9_%$/.&=:;#+?]', true, index)
|
3934
|
+
r12 = instantiate_node(SyntaxNode,input, index...(index + 1))
|
3935
3935
|
@index += 1
|
3936
3936
|
else
|
3937
3937
|
r12 = nil
|
@@ -3975,8 +3975,8 @@ module Less
|
|
3975
3975
|
|
3976
3976
|
s0, i0 = [], index
|
3977
3977
|
loop do
|
3978
|
-
if has_terminal?('[ ]', true, index)
|
3979
|
-
r1 =
|
3978
|
+
if has_terminal?('\G[ ]', true, index)
|
3979
|
+
r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
|
3980
3980
|
@index += 1
|
3981
3981
|
else
|
3982
3982
|
r1 = nil
|
@@ -4004,8 +4004,8 @@ module Less
|
|
4004
4004
|
|
4005
4005
|
s0, i0 = [], index
|
4006
4006
|
loop do
|
4007
|
-
if has_terminal?('[ ]', true, index)
|
4008
|
-
r1 =
|
4007
|
+
if has_terminal?('\G[ ]', true, index)
|
4008
|
+
r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
|
4009
4009
|
@index += 1
|
4010
4010
|
else
|
4011
4011
|
r1 = nil
|
@@ -4038,8 +4038,8 @@ module Less
|
|
4038
4038
|
|
4039
4039
|
s0, i0 = [], index
|
4040
4040
|
loop do
|
4041
|
-
if has_terminal?('[\\n ]', true, index)
|
4042
|
-
r1 =
|
4041
|
+
if has_terminal?('\G[\\n ]', true, index)
|
4042
|
+
r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
|
4043
4043
|
@index += 1
|
4044
4044
|
else
|
4045
4045
|
r1 = nil
|
@@ -4067,8 +4067,8 @@ module Less
|
|
4067
4067
|
|
4068
4068
|
s0, i0 = [], index
|
4069
4069
|
loop do
|
4070
|
-
if has_terminal?('[\\n ]', true, index)
|
4071
|
-
r1 =
|
4070
|
+
if has_terminal?('\G[\\n ]', true, index)
|
4071
|
+
r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
|
4072
4072
|
@index += 1
|
4073
4073
|
else
|
4074
4074
|
r1 = nil
|
@@ -4104,8 +4104,8 @@ module Less
|
|
4104
4104
|
|
4105
4105
|
i0, s0 = index, []
|
4106
4106
|
i1 = index
|
4107
|
-
if has_terminal?('[ ;\\n]', true, index)
|
4108
|
-
r2 =
|
4107
|
+
if has_terminal?('\G[ ;\\n]', true, index)
|
4108
|
+
r2 = instantiate_node(SyntaxNode,input, index...(index + 1))
|
4109
4109
|
@index += 1
|
4110
4110
|
else
|
4111
4111
|
r2 = nil
|
@@ -4,13 +4,9 @@ module Treetop
|
|
4
4
|
def compile(address, builder, parent_expression = nil)
|
5
5
|
super
|
6
6
|
|
7
|
-
builder.if__ "has_terminal?(#{
|
8
|
-
|
9
|
-
|
10
|
-
extend_result_with_inline_module
|
11
|
-
else
|
12
|
-
assign_lazily_instantiated_node
|
13
|
-
end
|
7
|
+
builder.if__ "has_terminal?(#{grounded_regexp(text_value)}, true, index)" do
|
8
|
+
assign_result "instantiate_node(#{node_class_name},input, index...(index + 1))"
|
9
|
+
extend_result_with_inline_module
|
14
10
|
builder << "@index += 1"
|
15
11
|
end
|
16
12
|
builder.else_ do
|
@@ -18,6 +14,11 @@ module Treetop
|
|
18
14
|
assign_result 'nil'
|
19
15
|
end
|
20
16
|
end
|
17
|
+
|
18
|
+
def grounded_regexp(string)
|
19
|
+
# Double any backslashes, then backslash any single-quotes:
|
20
|
+
"'\\G#{string.gsub(/\\/) { '\\\\' }.gsub(/'/) { "\\'"}}'"
|
21
|
+
end
|
21
22
|
end
|
22
23
|
end
|
23
24
|
end
|
@@ -21,10 +21,6 @@ module Treetop
|
|
21
21
|
parent_expression && parent_expression.inline_module_name
|
22
22
|
end
|
23
23
|
|
24
|
-
def decorated?
|
25
|
-
parent_expression && (parent_expression.node_class_name || parent_expression.node_class_name || parent_expression.inline_module_name)
|
26
|
-
end
|
27
|
-
|
28
24
|
def optional_arg(arg)
|
29
25
|
if arg
|
30
26
|
", #{arg}"
|
@@ -93,10 +89,6 @@ module Treetop
|
|
93
89
|
def assign_failure(start_index_var)
|
94
90
|
assign_result("nil")
|
95
91
|
end
|
96
|
-
|
97
|
-
def assign_lazily_instantiated_node
|
98
|
-
assign_result("true")
|
99
|
-
end
|
100
92
|
|
101
93
|
def var_initialization
|
102
94
|
left, right = [], []
|
@@ -3,7 +3,7 @@ module Treetop
|
|
3
3
|
class CompiledParser
|
4
4
|
include Treetop::Runtime
|
5
5
|
|
6
|
-
attr_reader :input, :index, :max_terminal_failure_index
|
6
|
+
attr_reader :input, :index, :terminal_failures, :max_terminal_failure_index
|
7
7
|
attr_writer :root
|
8
8
|
attr_accessor :consume_all_input
|
9
9
|
alias :consume_all_input? :consume_all_input
|
@@ -25,26 +25,22 @@ module Treetop
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def failure_line
|
28
|
-
|
28
|
+
terminal_failures && input.line_of(failure_index)
|
29
29
|
end
|
30
30
|
|
31
31
|
def failure_column
|
32
|
-
|
32
|
+
terminal_failures && input.column_of(failure_index)
|
33
33
|
end
|
34
34
|
|
35
35
|
def failure_reason
|
36
36
|
return nil unless (tf = terminal_failures) && tf.size > 0
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
end
|
45
|
-
|
46
|
-
def terminal_failures
|
47
|
-
@terminal_failures.map! {|tf_ary| TerminalParseFailure.new(*tf_ary) }
|
37
|
+
"Expected " +
|
38
|
+
(tf.size == 1 ?
|
39
|
+
tf[0].expected_string :
|
40
|
+
"one of #{tf.map{|f| f.expected_string}.uniq*', '}"
|
41
|
+
) +
|
42
|
+
" at line #{failure_line}, column #{failure_column} (byte #{failure_index+1})" +
|
43
|
+
" after #{input[index...failure_index]}"
|
48
44
|
end
|
49
45
|
|
50
46
|
|
@@ -91,7 +87,7 @@ module Treetop
|
|
91
87
|
rx = @regexps[terminal] ||= Regexp.new(terminal)
|
92
88
|
input.index(rx, index) == index
|
93
89
|
else
|
94
|
-
input[index
|
90
|
+
input[index, terminal.size] == terminal
|
95
91
|
end
|
96
92
|
end
|
97
93
|
|
@@ -101,7 +97,7 @@ module Treetop
|
|
101
97
|
@max_terminal_failure_index = index
|
102
98
|
@terminal_failures = []
|
103
99
|
end
|
104
|
-
|
100
|
+
terminal_failures << TerminalParseFailure.new(index, expected_string)
|
105
101
|
return nil
|
106
102
|
end
|
107
103
|
end
|
@@ -1,33 +1,19 @@
|
|
1
1
|
module Treetop
|
2
2
|
module Runtime
|
3
3
|
class SyntaxNode
|
4
|
-
attr_reader :input, :interval
|
4
|
+
attr_reader :input, :interval, :elements
|
5
5
|
attr_accessor :parent
|
6
6
|
|
7
7
|
def initialize(input, interval, elements = nil)
|
8
8
|
@input = input
|
9
9
|
@interval = interval
|
10
10
|
if @elements = elements
|
11
|
-
|
12
|
-
@elements.each do |element|
|
11
|
+
elements.each do |element|
|
13
12
|
element.parent = self
|
14
13
|
end
|
15
14
|
end
|
16
15
|
end
|
17
16
|
|
18
|
-
def elements
|
19
|
-
return @elements if terminal?
|
20
|
-
# fill in any gaps in the sequence (lazy instantiation) if needed
|
21
|
-
@comprehensive_elements ||= interval.inject(@elements) do |elements, index|
|
22
|
-
unless @elements.any? {|element| element.interval.include?(index) }
|
23
|
-
node = SyntaxNode.new(input, index...(index + 1))
|
24
|
-
node.parent = self
|
25
|
-
elements << node
|
26
|
-
end
|
27
|
-
elements
|
28
|
-
end.sort
|
29
|
-
end
|
30
|
-
|
31
17
|
def terminal?
|
32
18
|
@elements.nil?
|
33
19
|
end
|
@@ -43,10 +29,6 @@ module Treetop
|
|
43
29
|
def empty?
|
44
30
|
interval.first == interval.last && interval.exclude_end?
|
45
31
|
end
|
46
|
-
|
47
|
-
def <=>(other)
|
48
|
-
self.interval.first <=> other.interval.first
|
49
|
-
end
|
50
32
|
|
51
33
|
def extension_modules
|
52
34
|
local_extensions =
|
@@ -69,18 +69,6 @@ module CharacterClassSpec
|
|
69
69
|
parse(' 1', :index => 1).should be_nil
|
70
70
|
end
|
71
71
|
end
|
72
|
-
|
73
|
-
describe "a character class followed by a node class declaration and a block" do
|
74
|
-
|
75
|
-
testing_expression "[A-Z] <CharacterClassSpec::Foo>"
|
76
|
-
|
77
|
-
it "actively generates nodes for the character when it is the primary node" do
|
78
|
-
result = parse('A')
|
79
|
-
result.should be_a(Treetop::Runtime::SyntaxNode)
|
80
|
-
result.elements.should be_nil
|
81
|
-
end
|
82
|
-
|
83
|
-
end
|
84
72
|
|
85
73
|
describe "A character class containing quotes" do
|
86
74
|
testing_expression "[\"']"
|
@@ -190,58 +178,5 @@ module CharacterClassSpec
|
|
190
178
|
parse("0").should be_nil
|
191
179
|
end
|
192
180
|
end
|
193
|
-
|
194
|
-
describe "a character class" do
|
195
|
-
testing_expression "[A-Z]"
|
196
|
-
it "actively generates a node for the character because it is the primary node" do
|
197
|
-
result = parse('A')
|
198
|
-
result.should be_a(Treetop::Runtime::SyntaxNode)
|
199
|
-
result.elements.should be_nil
|
200
|
-
end
|
201
|
-
end
|
202
|
-
|
203
|
-
describe "a character class mixed with other expressions" do
|
204
|
-
testing_expression '[A-Z] "a"'
|
205
|
-
it "lazily instantiates a node for the character" do
|
206
|
-
result = parse('Aa')
|
207
|
-
result.instance_variable_get("@elements").size.should == 1
|
208
|
-
result.elements.size.should == 2
|
209
|
-
end
|
210
|
-
end
|
211
|
-
|
212
|
-
describe "a character class with a node class declaration mixed with other expressions" do
|
213
|
-
testing_expression '([A-Z] <CharacterClassSpec::Foo>) "a"'
|
214
|
-
it "actively generates a node for the character because it has a node class declared" do
|
215
|
-
result = parse('Aa')
|
216
|
-
result.instance_variable_get("@elements").size.should == 2
|
217
|
-
result.elements.size.should == 2
|
218
|
-
end
|
219
|
-
end
|
220
|
-
|
221
|
-
describe "a character class with a node module declaration mixed with other expressions" do
|
222
|
-
testing_expression '([A-Z] <CharacterClassSpec::ModFoo>) "a"'
|
223
|
-
it "actively generates a node for the character because it has a node module declared" do
|
224
|
-
result = parse('Aa')
|
225
|
-
result.instance_variable_get("@elements").size.should == 2
|
226
|
-
result.elements.size.should == 2
|
227
|
-
end
|
228
|
-
end
|
229
|
-
|
230
|
-
describe "a character class with an inline block mixed with other expressions" do
|
231
|
-
testing_expression '([A-Z] { def a_method; end }) "a"'
|
232
|
-
it "actively generates a node for the character because it has an inline block" do
|
233
|
-
result = parse('Aa')
|
234
|
-
result.instance_variable_get("@elements").size.should == 2
|
235
|
-
result.elements.size.should == 2
|
236
|
-
end
|
237
|
-
end
|
238
|
-
|
239
|
-
describe "a character class with a label mixed with other expressions" do
|
240
|
-
testing_expression 'upper:([A-Z]) "b"'
|
241
|
-
it "returns the correct element for the labeled expression" do
|
242
|
-
result = parse('Ab')
|
243
|
-
result.upper.text_value.should == "A"
|
244
|
-
end
|
245
|
-
end
|
246
181
|
|
247
182
|
end
|
@@ -50,19 +50,4 @@ module SyntaxNodeSpec
|
|
50
50
|
end
|
51
51
|
end
|
52
52
|
end
|
53
|
-
|
54
|
-
describe "A new nonterminal syntax node with all children lazily instantiated" do
|
55
|
-
attr_reader :node
|
56
|
-
|
57
|
-
before do
|
58
|
-
@input = 'test input'
|
59
|
-
@node = Runtime::SyntaxNode.new('input', 0...3, [true, true, true])
|
60
|
-
end
|
61
|
-
|
62
|
-
it "should lazily instantiate its child nodes" do
|
63
|
-
node.elements.size.should == 3
|
64
|
-
node.elements.first.interval.should == (0...1)
|
65
|
-
node.elements.first.parent.should == @node
|
66
|
-
end
|
67
|
-
end
|
68
53
|
end
|
@@ -7,7 +7,7 @@ $gemspec = Gem::Specification.new do |s|
|
|
7
7
|
s.homepage = "http://functionalform.blogspot.com"
|
8
8
|
s.platform = Gem::Platform::RUBY
|
9
9
|
s.summary = "A Ruby-based text parsing and interpretation DSL"
|
10
|
-
s.files = ["README", "Rakefile", "{test,lib,bin,doc,examples}/**/*"].map{|p| Dir[p]}.flatten
|
10
|
+
s.files = ["LICENSE", "README", "Rakefile", "{test,lib,bin,doc,examples}/**/*"].map{|p| Dir[p]}.flatten
|
11
11
|
s.bindir = "bin"
|
12
12
|
s.executables = ["tt"]
|
13
13
|
s.require_path = "lib"
|