treetop 1.0.0 → 1.0.1

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 CHANGED
@@ -15,7 +15,7 @@ end
15
15
 
16
16
  gemspec = Gem::Specification.new do |s|
17
17
  s.name = "treetop"
18
- s.version = "1.0.0"
18
+ s.version = "1.0.1"
19
19
  s.author = "Nathan Sobo"
20
20
  s.email = "nathansobo@gmail.com"
21
21
  s.homepage = "http://functionalform.blogspot.com"
@@ -8,12 +8,6 @@ module Treetop
8
8
  end
9
9
 
10
10
  module TreetopFile0
11
- def compile
12
- prefix.text_value + module_or_grammar.compile + suffix.text_value
13
- end
14
- end
15
-
16
- module TreetopFile1
17
11
  def prefix
18
12
  elements[0]
19
13
  end
@@ -27,6 +21,12 @@ module Treetop
27
21
  end
28
22
  end
29
23
 
24
+ module TreetopFile1
25
+ def compile
26
+ prefix.text_value + module_or_grammar.compile + suffix.text_value
27
+ end
28
+ end
29
+
30
30
  def _nt_treetop_file
31
31
  start_index = index
32
32
  cached = node_cache[:treetop_file][index]
@@ -74,8 +74,8 @@ module Treetop
74
74
  end
75
75
  if s0.last.success?
76
76
  r0 = (SyntaxNode).new(input, i0...index, s0)
77
- r0.extend(TreetopFile1)
78
77
  r0.extend(TreetopFile0)
78
+ r0.extend(TreetopFile1)
79
79
  else
80
80
  self.index = i0
81
81
  r0 = ParseFailure.new(input, i0, s0)
@@ -104,12 +104,6 @@ module Treetop
104
104
  end
105
105
 
106
106
  module ModuleDeclaration2
107
- def compile
108
- prefix.text_value + module_contents.compile + suffix.text_value
109
- end
110
- end
111
-
112
- module ModuleDeclaration3
113
107
  def prefix
114
108
  elements[0]
115
109
  end
@@ -123,6 +117,12 @@ module Treetop
123
117
  end
124
118
  end
125
119
 
120
+ module ModuleDeclaration3
121
+ def compile
122
+ prefix.text_value + module_contents.compile + suffix.text_value
123
+ end
124
+ end
125
+
126
126
  def _nt_module_declaration
127
127
  start_index = index
128
128
  cached = node_cache[:module_declaration][index]
@@ -208,8 +208,8 @@ module Treetop
208
208
  end
209
209
  if s0.last.success?
210
210
  r0 = (SyntaxNode).new(input, i0...index, s0)
211
- r0.extend(ModuleDeclaration3)
212
211
  r0.extend(ModuleDeclaration2)
212
+ r0.extend(ModuleDeclaration3)
213
213
  else
214
214
  self.index = i0
215
215
  r0 = ParseFailure.new(input, i0, s0)
@@ -344,22 +344,22 @@ module Treetop
344
344
  end
345
345
 
346
346
  module DeclarationSequence1
347
- def declarations
348
- [head] + tail
347
+ def head
348
+ elements[0]
349
349
  end
350
-
350
+
351
351
  def tail
352
- super.elements.map { |elt| elt.declaration }
352
+ elements[1]
353
353
  end
354
354
  end
355
355
 
356
356
  module DeclarationSequence2
357
- def head
358
- elements[0]
357
+ def declarations
358
+ [head] + tail
359
359
  end
360
-
360
+
361
361
  def tail
362
- elements[1]
362
+ super.elements.map { |elt| elt.declaration }
363
363
  end
364
364
  end
365
365
 
@@ -409,8 +409,8 @@ module Treetop
409
409
  end
410
410
  if s1.last.success?
411
411
  r1 = (DeclarationSequence).new(input, i1...index, s1)
412
- r1.extend(DeclarationSequence2)
413
412
  r1.extend(DeclarationSequence1)
413
+ r1.extend(DeclarationSequence2)
414
414
  else
415
415
  self.index = i1
416
416
  r1 = ParseFailure.new(input, i1, s1)
@@ -468,16 +468,16 @@ module Treetop
468
468
  end
469
469
 
470
470
  module IncludeDeclaration0
471
- def compile(builder)
472
- builder << text_value
471
+ def space
472
+ elements[1]
473
473
  end
474
+
474
475
  end
475
476
 
476
477
  module IncludeDeclaration1
477
- def space
478
- elements[1]
478
+ def compile(builder)
479
+ builder << text_value
479
480
  end
480
-
481
481
  end
482
482
 
483
483
  def _nt_include_declaration
@@ -515,8 +515,8 @@ module Treetop
515
515
  end
516
516
  if s0.last.success?
517
517
  r0 = (SyntaxNode).new(input, i0...index, s0)
518
- r0.extend(IncludeDeclaration1)
519
518
  r0.extend(IncludeDeclaration0)
519
+ r0.extend(IncludeDeclaration1)
520
520
  else
521
521
  self.index = i0
522
522
  r0 = ParseFailure.new(input, i0, s0)
@@ -643,26 +643,26 @@ module Treetop
643
643
  end
644
644
 
645
645
  module Choice1
646
- def alternatives
647
- [head] + tail
646
+ def head
647
+ elements[0]
648
648
  end
649
649
 
650
650
  def tail
651
- super.elements.map {|elt| elt.alternative}
652
- end
653
-
654
- def inline_modules
655
- (alternatives.map {|alt| alt.inline_modules }).flatten
651
+ elements[1]
656
652
  end
657
653
  end
658
654
 
659
655
  module Choice2
660
- def head
661
- elements[0]
656
+ def alternatives
657
+ [head] + tail
662
658
  end
663
659
 
664
660
  def tail
665
- elements[1]
661
+ super.elements.map {|elt| elt.alternative}
662
+ end
663
+
664
+ def inline_modules
665
+ (alternatives.map {|alt| alt.inline_modules }).flatten
666
666
  end
667
667
  end
668
668
 
@@ -729,8 +729,8 @@ module Treetop
729
729
  end
730
730
  if s0.last.success?
731
731
  r0 = (Choice).new(input, i0...index, s0)
732
- r0.extend(Choice2)
733
732
  r0.extend(Choice1)
733
+ r0.extend(Choice2)
734
734
  else
735
735
  self.index = i0
736
736
  r0 = ParseFailure.new(input, i0, s0)
@@ -752,6 +752,20 @@ module Treetop
752
752
  end
753
753
 
754
754
  module Sequence1
755
+ def head
756
+ elements[0]
757
+ end
758
+
759
+ def tail
760
+ elements[1]
761
+ end
762
+
763
+ def node_class_declarations
764
+ elements[2]
765
+ end
766
+ end
767
+
768
+ module Sequence2
755
769
  def sequence_elements
756
770
  [head] + tail
757
771
  end
@@ -771,20 +785,6 @@ module Treetop
771
785
  end
772
786
  end
773
787
 
774
- module Sequence2
775
- def head
776
- elements[0]
777
- end
778
-
779
- def tail
780
- elements[1]
781
- end
782
-
783
- def node_class_declarations
784
- elements[2]
785
- end
786
- end
787
-
788
788
  def _nt_sequence
789
789
  start_index = index
790
790
  cached = node_cache[:sequence][index]
@@ -834,8 +834,8 @@ module Treetop
834
834
  end
835
835
  if s0.last.success?
836
836
  r0 = (Sequence).new(input, i0...index, s0)
837
- r0.extend(Sequence2)
838
837
  r0.extend(Sequence1)
838
+ r0.extend(Sequence2)
839
839
  else
840
840
  self.index = i0
841
841
  r0 = ParseFailure.new(input, i0, s0)
@@ -878,6 +878,16 @@ module Treetop
878
878
  end
879
879
 
880
880
  module Primary0
881
+ def prefix
882
+ elements[0]
883
+ end
884
+
885
+ def atomic
886
+ elements[1]
887
+ end
888
+ end
889
+
890
+ module Primary1
881
891
  def compile(address, builder)
882
892
  prefix.compile(address, builder, self)
883
893
  end
@@ -895,17 +905,21 @@ module Treetop
895
905
  end
896
906
  end
897
907
 
898
- module Primary1
899
- def prefix
908
+ module Primary2
909
+ def atomic
900
910
  elements[0]
901
911
  end
902
912
 
903
- def atomic
913
+ def suffix
904
914
  elements[1]
905
915
  end
916
+
917
+ def node_class_declarations
918
+ elements[2]
919
+ end
906
920
  end
907
921
 
908
- module Primary2
922
+ module Primary3
909
923
  def compile(address, builder)
910
924
  suffix.compile(address, builder, self)
911
925
  end
@@ -927,21 +941,17 @@ module Treetop
927
941
  end
928
942
  end
929
943
 
930
- module Primary3
944
+ module Primary4
931
945
  def atomic
932
946
  elements[0]
933
947
  end
934
948
 
935
- def suffix
936
- elements[1]
937
- end
938
-
939
949
  def node_class_declarations
940
- elements[2]
950
+ elements[1]
941
951
  end
942
952
  end
943
953
 
944
- module Primary4
954
+ module Primary5
945
955
  def compile(address, builder)
946
956
  atomic.compile(address, builder, self)
947
957
  end
@@ -959,16 +969,6 @@ module Treetop
959
969
  end
960
970
  end
961
971
 
962
- module Primary5
963
- def atomic
964
- elements[0]
965
- end
966
-
967
- def node_class_declarations
968
- elements[1]
969
- end
970
- end
971
-
972
972
  def _nt_primary
973
973
  start_index = index
974
974
  cached = node_cache[:primary][index]
@@ -987,8 +987,8 @@ module Treetop
987
987
  end
988
988
  if s1.last.success?
989
989
  r1 = (SyntaxNode).new(input, i1...index, s1)
990
- r1.extend(Primary1)
991
990
  r1.extend(Primary0)
991
+ r1.extend(Primary1)
992
992
  else
993
993
  self.index = i1
994
994
  r1 = ParseFailure.new(input, i1, s1)
@@ -1011,8 +1011,8 @@ module Treetop
1011
1011
  end
1012
1012
  if s4.last.success?
1013
1013
  r4 = (SyntaxNode).new(input, i4...index, s4)
1014
- r4.extend(Primary3)
1015
1014
  r4.extend(Primary2)
1015
+ r4.extend(Primary3)
1016
1016
  else
1017
1017
  self.index = i4
1018
1018
  r4 = ParseFailure.new(input, i4, s4)
@@ -1031,8 +1031,8 @@ module Treetop
1031
1031
  end
1032
1032
  if s8.last.success?
1033
1033
  r8 = (SyntaxNode).new(input, i8...index, s8)
1034
- r8.extend(Primary5)
1035
1034
  r8.extend(Primary4)
1035
+ r8.extend(Primary5)
1036
1036
  else
1037
1037
  self.index = i8
1038
1038
  r8 = ParseFailure.new(input, i8, s8)
@@ -1054,6 +1054,16 @@ module Treetop
1054
1054
  end
1055
1055
 
1056
1056
  module LabeledSequencePrimary0
1057
+ def label
1058
+ elements[0]
1059
+ end
1060
+
1061
+ def sequence_primary
1062
+ elements[1]
1063
+ end
1064
+ end
1065
+
1066
+ module LabeledSequencePrimary1
1057
1067
  def compile(lexical_address, builder)
1058
1068
  sequence_primary.compile(lexical_address, builder)
1059
1069
  end
@@ -1073,16 +1083,6 @@ module Treetop
1073
1083
  end
1074
1084
  end
1075
1085
 
1076
- module LabeledSequencePrimary1
1077
- def label
1078
- elements[0]
1079
- end
1080
-
1081
- def sequence_primary
1082
- elements[1]
1083
- end
1084
- end
1085
-
1086
1086
  def _nt_labeled_sequence_primary
1087
1087
  start_index = index
1088
1088
  cached = node_cache[:labeled_sequence_primary][index]
@@ -1100,8 +1100,8 @@ module Treetop
1100
1100
  end
1101
1101
  if s0.last.success?
1102
1102
  r0 = (SyntaxNode).new(input, i0...index, s0)
1103
- r0.extend(LabeledSequencePrimary1)
1104
1103
  r0.extend(LabeledSequencePrimary0)
1104
+ r0.extend(LabeledSequencePrimary1)
1105
1105
  else
1106
1106
  self.index = i0
1107
1107
  r0 = ParseFailure.new(input, i0, s0)
@@ -1120,12 +1120,12 @@ module Treetop
1120
1120
  end
1121
1121
 
1122
1122
  module Label1
1123
- def name
1124
- elements[0].text_value
1125
- end
1126
1123
  end
1127
1124
 
1128
1125
  module Label2
1126
+ def name
1127
+ elements[0].text_value
1128
+ end
1129
1129
  end
1130
1130
 
1131
1131
  module Label3
@@ -1175,8 +1175,8 @@ module Treetop
1175
1175
  end
1176
1176
  if s1.last.success?
1177
1177
  r1 = (SyntaxNode).new(input, i1...index, s1)
1178
- r1.extend(Label2)
1179
1178
  r1.extend(Label1)
1179
+ r1.extend(Label2)
1180
1180
  else
1181
1181
  self.index = i1
1182
1182
  r1 = ParseFailure.new(input, i1, s1)
@@ -1203,6 +1203,16 @@ module Treetop
1203
1203
  end
1204
1204
 
1205
1205
  module SequencePrimary0
1206
+ def prefix
1207
+ elements[0]
1208
+ end
1209
+
1210
+ def atomic
1211
+ elements[1]
1212
+ end
1213
+ end
1214
+
1215
+ module SequencePrimary1
1206
1216
  def compile(lexical_address, builder)
1207
1217
  prefix.compile(lexical_address, builder, self)
1208
1218
  end
@@ -1220,17 +1230,17 @@ module Treetop
1220
1230
  end
1221
1231
  end
1222
1232
 
1223
- module SequencePrimary1
1224
- def prefix
1233
+ module SequencePrimary2
1234
+ def atomic
1225
1235
  elements[0]
1226
1236
  end
1227
1237
 
1228
- def atomic
1238
+ def suffix
1229
1239
  elements[1]
1230
1240
  end
1231
1241
  end
1232
1242
 
1233
- module SequencePrimary2
1243
+ module SequencePrimary3
1234
1244
  def compile(lexical_address, builder)
1235
1245
  suffix.compile(lexical_address, builder, self)
1236
1246
  end
@@ -1248,16 +1258,6 @@ module Treetop
1248
1258
  end
1249
1259
  end
1250
1260
 
1251
- module SequencePrimary3
1252
- def atomic
1253
- elements[0]
1254
- end
1255
-
1256
- def suffix
1257
- elements[1]
1258
- end
1259
- end
1260
-
1261
1261
  def _nt_sequence_primary
1262
1262
  start_index = index
1263
1263
  cached = node_cache[:sequence_primary][index]
@@ -1276,8 +1276,8 @@ module Treetop
1276
1276
  end
1277
1277
  if s1.last.success?
1278
1278
  r1 = (SyntaxNode).new(input, i1...index, s1)
1279
- r1.extend(SequencePrimary1)
1280
1279
  r1.extend(SequencePrimary0)
1280
+ r1.extend(SequencePrimary1)
1281
1281
  else
1282
1282
  self.index = i1
1283
1283
  r1 = ParseFailure.new(input, i1, s1)
@@ -1296,8 +1296,8 @@ module Treetop
1296
1296
  end
1297
1297
  if s4.last.success?
1298
1298
  r4 = (SyntaxNode).new(input, i4...index, s4)
1299
- r4.extend(SequencePrimary3)
1300
1299
  r4.extend(SequencePrimary2)
1300
+ r4.extend(SequencePrimary3)
1301
1301
  else
1302
1302
  self.index = i4
1303
1303
  r4 = ParseFailure.new(input, i4, s4)
@@ -1371,6 +1371,16 @@ module Treetop
1371
1371
  end
1372
1372
 
1373
1373
  module NodeClassDeclarations0
1374
+ def node_class_expression
1375
+ elements[0]
1376
+ end
1377
+
1378
+ def trailing_inline_module
1379
+ elements[1]
1380
+ end
1381
+ end
1382
+
1383
+ module NodeClassDeclarations1
1374
1384
  def node_class
1375
1385
  node_class_expression.node_class
1376
1386
  end
@@ -1388,16 +1398,6 @@ module Treetop
1388
1398
  end
1389
1399
  end
1390
1400
 
1391
- module NodeClassDeclarations1
1392
- def node_class_expression
1393
- elements[0]
1394
- end
1395
-
1396
- def trailing_inline_module
1397
- elements[1]
1398
- end
1399
- end
1400
-
1401
1401
  def _nt_node_class_declarations
1402
1402
  start_index = index
1403
1403
  cached = node_cache[:node_class_declarations][index]
@@ -1415,8 +1415,8 @@ module Treetop
1415
1415
  end
1416
1416
  if s0.last.success?
1417
1417
  r0 = (SyntaxNode).new(input, i0...index, s0)
1418
- r0.extend(NodeClassDeclarations1)
1419
1418
  r0.extend(NodeClassDeclarations0)
1419
+ r0.extend(NodeClassDeclarations1)
1420
1420
  else
1421
1421
  self.index = i0
1422
1422
  r0 = ParseFailure.new(input, i0, s0)
@@ -1528,16 +1528,16 @@ module Treetop
1528
1528
  end
1529
1529
 
1530
1530
  module ParenthesizedExpression0
1531
- def inline_modules
1532
- parsing_expression.inline_modules
1531
+ def parsing_expression
1532
+ elements[2]
1533
1533
  end
1534
+
1534
1535
  end
1535
1536
 
1536
1537
  module ParenthesizedExpression1
1537
- def parsing_expression
1538
- elements[2]
1538
+ def inline_modules
1539
+ parsing_expression.inline_modules
1539
1540
  end
1540
-
1541
1541
  end
1542
1542
 
1543
1543
  def _nt_parenthesized_expression
@@ -1579,8 +1579,8 @@ module Treetop
1579
1579
  end
1580
1580
  if s0.last.success?
1581
1581
  r0 = (ParenthesizedExpression).new(input, i0...index, s0)
1582
- r0.extend(ParenthesizedExpression1)
1583
1582
  r0.extend(ParenthesizedExpression0)
1583
+ r0.extend(ParenthesizedExpression1)
1584
1584
  else
1585
1585
  self.index = i0
1586
1586
  r0 = ParseFailure.new(input, i0, s0)
@@ -1994,16 +1994,16 @@ module Treetop
1994
1994
  end
1995
1995
 
1996
1996
  module NodeClassExpression1
1997
- def node_class
1998
- elements[2].text_value
1997
+ def space
1998
+ elements[0]
1999
1999
  end
2000
+
2000
2001
  end
2001
2002
 
2002
2003
  module NodeClassExpression2
2003
- def space
2004
- elements[0]
2004
+ def node_class
2005
+ elements[2].text_value
2005
2006
  end
2006
-
2007
2007
  end
2008
2008
 
2009
2009
  module NodeClassExpression3
@@ -2073,8 +2073,8 @@ module Treetop
2073
2073
  end
2074
2074
  if s1.last.success?
2075
2075
  r1 = (SyntaxNode).new(input, i1...index, s1)
2076
- r1.extend(NodeClassExpression2)
2077
2076
  r1.extend(NodeClassExpression1)
2077
+ r1.extend(NodeClassExpression2)
2078
2078
  else
2079
2079
  self.index = i1
2080
2080
  r1 = ParseFailure.new(input, i1, s1)
@@ -2101,16 +2101,6 @@ module Treetop
2101
2101
  end
2102
2102
 
2103
2103
  module TrailingInlineModule0
2104
- def inline_modules
2105
- [inline_module]
2106
- end
2107
-
2108
- def inline_module_name
2109
- inline_module.module_name
2110
- end
2111
- end
2112
-
2113
- module TrailingInlineModule1
2114
2104
  def space
2115
2105
  elements[0]
2116
2106
  end
@@ -2120,6 +2110,16 @@ module Treetop
2120
2110
  end
2121
2111
  end
2122
2112
 
2113
+ module TrailingInlineModule1
2114
+ def inline_modules
2115
+ [inline_module]
2116
+ end
2117
+
2118
+ def inline_module_name
2119
+ inline_module.module_name
2120
+ end
2121
+ end
2122
+
2123
2123
  module TrailingInlineModule2
2124
2124
  def inline_modules
2125
2125
  []
@@ -2152,8 +2152,8 @@ module Treetop
2152
2152
  end
2153
2153
  if s1.last.success?
2154
2154
  r1 = (SyntaxNode).new(input, i1...index, s1)
2155
- r1.extend(TrailingInlineModule1)
2156
2155
  r1.extend(TrailingInlineModule0)
2156
+ r1.extend(TrailingInlineModule1)
2157
2157
  else
2158
2158
  self.index = i1
2159
2159
  r1 = ParseFailure.new(input, i1, s1)
@@ -5,7 +5,13 @@ module Treetop
5
5
  def compile(builder)
6
6
  unless rules.empty?
7
7
  builder.method_declaration("root") do
8
- builder << rules.first.method_name
8
+ builder.assign 'result', rules.first.method_name
9
+ builder.if__ 'index == input.size' do
10
+ builder << 'return result'
11
+ end
12
+ builder.else_ do
13
+ builder << 'return ParseFailure.new(input, index, result.nested_failures)'
14
+ end
9
15
  end
10
16
  builder.newline
11
17
  end
@@ -27,6 +27,10 @@ class GrammarTest < CompilerTestCase
27
27
  parse('bazbaz').should be_success
28
28
  end
29
29
 
30
+ it "fails if it does not parse all input" do
31
+ parse('barbarbazbaz').should be_failure
32
+ end
33
+
30
34
  it "mixes in included modules" do
31
35
  Foo.ancestors.should include(Bar)
32
36
  end
metadata CHANGED
@@ -3,7 +3,7 @@ rubygems_version: 0.9.2
3
3
  specification_version: 1
4
4
  name: treetop
5
5
  version: !ruby/object:Gem::Version
6
- version: 1.0.0
6
+ version: 1.0.1
7
7
  date: 2007-09-14 00:00:00 -07:00
8
8
  summary: A Ruby-based text parsing and interpretation DSL
9
9
  require_paths: