personify 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (130) hide show
  1. data/.gitignore +1 -0
  2. data/LICENSE +20 -0
  3. data/README.md +172 -0
  4. data/Rakefile +53 -0
  5. data/VERSION +1 -0
  6. data/doc/syntax_ideas.md +141 -0
  7. data/lib/personify/context.rb +55 -0
  8. data/lib/personify/parser/personify.rb +1071 -0
  9. data/lib/personify/parser/personify.treetop +107 -0
  10. data/lib/personify/parser/personify_node_classes.rb +121 -0
  11. data/lib/personify/template.rb +17 -0
  12. data/lib/personify.rb +8 -0
  13. data/script/generate_parser.rb +6 -0
  14. data/test/context_test.rb +122 -0
  15. data/test/fixtures/multiple_tags.txt +8 -0
  16. data/test/parse_runner.rb +60 -0
  17. data/test/parser_test.rb +291 -0
  18. data/test/test_helper.rb +16 -0
  19. data/vendor/treetop/.gitignore +5 -0
  20. data/vendor/treetop/History.txt +9 -0
  21. data/vendor/treetop/README +164 -0
  22. data/vendor/treetop/Rakefile +20 -0
  23. data/vendor/treetop/Treetop.tmbundle/Snippets/grammar ___ end.tmSnippet +20 -0
  24. data/vendor/treetop/Treetop.tmbundle/Snippets/rule ___ end.tmSnippet +18 -0
  25. data/vendor/treetop/Treetop.tmbundle/Syntaxes/Treetop Grammar.tmLanguage +251 -0
  26. data/vendor/treetop/Treetop.tmbundle/info.plist +10 -0
  27. data/vendor/treetop/bin/tt +28 -0
  28. data/vendor/treetop/doc/contributing_and_planned_features.markdown +103 -0
  29. data/vendor/treetop/doc/grammar_composition.markdown +65 -0
  30. data/vendor/treetop/doc/index.markdown +90 -0
  31. data/vendor/treetop/doc/pitfalls_and_advanced_techniques.markdown +51 -0
  32. data/vendor/treetop/doc/semantic_interpretation.markdown +189 -0
  33. data/vendor/treetop/doc/site.rb +110 -0
  34. data/vendor/treetop/doc/sitegen.rb +60 -0
  35. data/vendor/treetop/doc/syntactic_recognition.markdown +100 -0
  36. data/vendor/treetop/doc/using_in_ruby.markdown +21 -0
  37. data/vendor/treetop/examples/lambda_calculus/arithmetic.rb +551 -0
  38. data/vendor/treetop/examples/lambda_calculus/arithmetic.treetop +97 -0
  39. data/vendor/treetop/examples/lambda_calculus/arithmetic_node_classes.rb +7 -0
  40. data/vendor/treetop/examples/lambda_calculus/arithmetic_test.rb +54 -0
  41. data/vendor/treetop/examples/lambda_calculus/lambda_calculus +0 -0
  42. data/vendor/treetop/examples/lambda_calculus/lambda_calculus.rb +718 -0
  43. data/vendor/treetop/examples/lambda_calculus/lambda_calculus.treetop +132 -0
  44. data/vendor/treetop/examples/lambda_calculus/lambda_calculus_node_classes.rb +5 -0
  45. data/vendor/treetop/examples/lambda_calculus/lambda_calculus_test.rb +89 -0
  46. data/vendor/treetop/examples/lambda_calculus/test_helper.rb +18 -0
  47. data/vendor/treetop/lib/treetop/bootstrap_gen_1_metagrammar.rb +45 -0
  48. data/vendor/treetop/lib/treetop/compiler/grammar_compiler.rb +40 -0
  49. data/vendor/treetop/lib/treetop/compiler/lexical_address_space.rb +17 -0
  50. data/vendor/treetop/lib/treetop/compiler/metagrammar.rb +2955 -0
  51. data/vendor/treetop/lib/treetop/compiler/metagrammar.treetop +404 -0
  52. data/vendor/treetop/lib/treetop/compiler/node_classes/anything_symbol.rb +20 -0
  53. data/vendor/treetop/lib/treetop/compiler/node_classes/atomic_expression.rb +14 -0
  54. data/vendor/treetop/lib/treetop/compiler/node_classes/character_class.rb +22 -0
  55. data/vendor/treetop/lib/treetop/compiler/node_classes/choice.rb +31 -0
  56. data/vendor/treetop/lib/treetop/compiler/node_classes/declaration_sequence.rb +24 -0
  57. data/vendor/treetop/lib/treetop/compiler/node_classes/grammar.rb +28 -0
  58. data/vendor/treetop/lib/treetop/compiler/node_classes/inline_module.rb +27 -0
  59. data/vendor/treetop/lib/treetop/compiler/node_classes/nonterminal.rb +13 -0
  60. data/vendor/treetop/lib/treetop/compiler/node_classes/optional.rb +19 -0
  61. data/vendor/treetop/lib/treetop/compiler/node_classes/parenthesized_expression.rb +9 -0
  62. data/vendor/treetop/lib/treetop/compiler/node_classes/parsing_expression.rb +138 -0
  63. data/vendor/treetop/lib/treetop/compiler/node_classes/parsing_rule.rb +55 -0
  64. data/vendor/treetop/lib/treetop/compiler/node_classes/predicate.rb +45 -0
  65. data/vendor/treetop/lib/treetop/compiler/node_classes/repetition.rb +55 -0
  66. data/vendor/treetop/lib/treetop/compiler/node_classes/sequence.rb +68 -0
  67. data/vendor/treetop/lib/treetop/compiler/node_classes/terminal.rb +20 -0
  68. data/vendor/treetop/lib/treetop/compiler/node_classes/transient_prefix.rb +9 -0
  69. data/vendor/treetop/lib/treetop/compiler/node_classes/treetop_file.rb +9 -0
  70. data/vendor/treetop/lib/treetop/compiler/node_classes.rb +19 -0
  71. data/vendor/treetop/lib/treetop/compiler/ruby_builder.rb +113 -0
  72. data/vendor/treetop/lib/treetop/compiler.rb +6 -0
  73. data/vendor/treetop/lib/treetop/ruby_extensions/string.rb +42 -0
  74. data/vendor/treetop/lib/treetop/ruby_extensions.rb +2 -0
  75. data/vendor/treetop/lib/treetop/runtime/compiled_parser.rb +95 -0
  76. data/vendor/treetop/lib/treetop/runtime/interval_skip_list/head_node.rb +15 -0
  77. data/vendor/treetop/lib/treetop/runtime/interval_skip_list/interval_skip_list.rb +200 -0
  78. data/vendor/treetop/lib/treetop/runtime/interval_skip_list/node.rb +164 -0
  79. data/vendor/treetop/lib/treetop/runtime/interval_skip_list.rb +4 -0
  80. data/vendor/treetop/lib/treetop/runtime/syntax_node.rb +72 -0
  81. data/vendor/treetop/lib/treetop/runtime/terminal_parse_failure.rb +16 -0
  82. data/vendor/treetop/lib/treetop/runtime/terminal_syntax_node.rb +17 -0
  83. data/vendor/treetop/lib/treetop/runtime.rb +5 -0
  84. data/vendor/treetop/lib/treetop/version.rb +9 -0
  85. data/vendor/treetop/lib/treetop.rb +11 -0
  86. data/vendor/treetop/script/generate_metagrammar.rb +14 -0
  87. data/vendor/treetop/script/svnadd +11 -0
  88. data/vendor/treetop/script/svnrm +11 -0
  89. data/vendor/treetop/spec/compiler/and_predicate_spec.rb +36 -0
  90. data/vendor/treetop/spec/compiler/anything_symbol_spec.rb +52 -0
  91. data/vendor/treetop/spec/compiler/character_class_spec.rb +188 -0
  92. data/vendor/treetop/spec/compiler/choice_spec.rb +80 -0
  93. data/vendor/treetop/spec/compiler/circular_compilation_spec.rb +28 -0
  94. data/vendor/treetop/spec/compiler/failure_propagation_functional_spec.rb +21 -0
  95. data/vendor/treetop/spec/compiler/grammar_compiler_spec.rb +84 -0
  96. data/vendor/treetop/spec/compiler/grammar_spec.rb +41 -0
  97. data/vendor/treetop/spec/compiler/nonterminal_symbol_spec.rb +40 -0
  98. data/vendor/treetop/spec/compiler/not_predicate_spec.rb +38 -0
  99. data/vendor/treetop/spec/compiler/one_or_more_spec.rb +35 -0
  100. data/vendor/treetop/spec/compiler/optional_spec.rb +37 -0
  101. data/vendor/treetop/spec/compiler/parenthesized_expression_spec.rb +19 -0
  102. data/vendor/treetop/spec/compiler/parsing_rule_spec.rb +32 -0
  103. data/vendor/treetop/spec/compiler/sequence_spec.rb +115 -0
  104. data/vendor/treetop/spec/compiler/terminal_spec.rb +81 -0
  105. data/vendor/treetop/spec/compiler/terminal_symbol_spec.rb +37 -0
  106. data/vendor/treetop/spec/compiler/test_grammar.treetop +7 -0
  107. data/vendor/treetop/spec/compiler/test_grammar.tt +7 -0
  108. data/vendor/treetop/spec/compiler/test_grammar_do.treetop +7 -0
  109. data/vendor/treetop/spec/compiler/zero_or_more_spec.rb +56 -0
  110. data/vendor/treetop/spec/composition/a.treetop +11 -0
  111. data/vendor/treetop/spec/composition/b.treetop +11 -0
  112. data/vendor/treetop/spec/composition/c.treetop +10 -0
  113. data/vendor/treetop/spec/composition/d.treetop +10 -0
  114. data/vendor/treetop/spec/composition/grammar_composition_spec.rb +26 -0
  115. data/vendor/treetop/spec/ruby_extensions/string_spec.rb +32 -0
  116. data/vendor/treetop/spec/runtime/compiled_parser_spec.rb +101 -0
  117. data/vendor/treetop/spec/runtime/interval_skip_list/delete_spec.rb +147 -0
  118. data/vendor/treetop/spec/runtime/interval_skip_list/expire_range_spec.rb +349 -0
  119. data/vendor/treetop/spec/runtime/interval_skip_list/insert_and_delete_node.rb +385 -0
  120. data/vendor/treetop/spec/runtime/interval_skip_list/insert_spec.rb +660 -0
  121. data/vendor/treetop/spec/runtime/interval_skip_list/interval_skip_list_spec.graffle +6175 -0
  122. data/vendor/treetop/spec/runtime/interval_skip_list/interval_skip_list_spec.rb +58 -0
  123. data/vendor/treetop/spec/runtime/interval_skip_list/palindromic_fixture.rb +23 -0
  124. data/vendor/treetop/spec/runtime/interval_skip_list/palindromic_fixture_spec.rb +164 -0
  125. data/vendor/treetop/spec/runtime/interval_skip_list/spec_helper.rb +84 -0
  126. data/vendor/treetop/spec/runtime/syntax_node_spec.rb +53 -0
  127. data/vendor/treetop/spec/spec_helper.rb +106 -0
  128. data/vendor/treetop/spec/spec_suite.rb +4 -0
  129. data/vendor/treetop/treetop.gemspec +18 -0
  130. metadata +196 -0
@@ -0,0 +1,385 @@
1
+ require File.expand_path("#{File.dirname(__FILE__)}/spec_helper")
2
+
3
+ describe "it is non-empty", :shared => true do
4
+ specify "#empty? returns false" do
5
+ list.should_not be_empty
6
+ end
7
+ end
8
+
9
+ describe "#nodes is an array of the three inserted nodes in key order", :shared => true do
10
+ specify "#nodes is an array of the three inserted nodes in key order" do
11
+ list.nodes.should == inserted_nodes.sort_by(&:key)
12
+ end
13
+ end
14
+
15
+ describe "it has nil forward pointers", :shared => true do
16
+ it "has nil forward pointers" do
17
+ inserted_node.forward.each do |next_pointer|
18
+ next_pointer.should be_nil
19
+ end
20
+ end
21
+ end
22
+
23
+ describe IntervalSkipList do
24
+ attr_reader :list
25
+
26
+ before do
27
+ @list = IntervalSkipList.new
28
+ end
29
+
30
+ describe " when nothing has been inserted" do
31
+ specify "#empty? returns true" do
32
+ list.should be_empty
33
+ end
34
+
35
+ specify "#nodes returns an empty array" do
36
+ list.nodes.should == []
37
+ end
38
+
39
+ describe "#head" do
40
+ attr_reader :head
41
+
42
+ before do
43
+ @head = list.head
44
+ end
45
+
46
+ it "#has a height of #max_height" do
47
+ head.height.should == list.max_height
48
+ end
49
+
50
+ it "has nil forward pointers" do
51
+ 0.upto(list.max_height - 1) do |i|
52
+ head.forward[i].should be_nil
53
+ end
54
+ end
55
+ end
56
+ end
57
+
58
+ describe " when 1 has been inserted" do
59
+ attr_reader :inserted_node, :inserted_nodes
60
+
61
+ def expected_node_heights
62
+ [1]
63
+ end
64
+
65
+ it_should_behave_like "#next_node_height is deterministic"
66
+
67
+ before do
68
+ @inserted_node = list.insert_node(1)
69
+ @inserted_nodes = [@inserted_node]
70
+ end
71
+
72
+ it_should_behave_like "it is non-empty"
73
+ it_should_behave_like "#nodes is an array of the three inserted nodes in key order"
74
+
75
+ describe "#head" do
76
+ attr_reader :head
77
+
78
+ before do
79
+ @head = list.head
80
+ end
81
+
82
+ it "has inserted_node.height forward pointers pointing at the inserted node" do
83
+ 0.upto(inserted_node.height - 1) do |i|
84
+ head.forward[i].should == inserted_node
85
+ end
86
+ end
87
+
88
+ it "has the rest of its forward pointers pointing at nil" do
89
+ inserted_node.height.upto(list.max_height - 1) do |i|
90
+ head.forward[i].should == nil
91
+ end
92
+ end
93
+ end
94
+
95
+ describe "the inserted node" do
96
+ it_should_behave_like "it has nil forward pointers"
97
+
98
+ it "has a height of the expected_node_heights.first" do
99
+ inserted_node.height.should == expected_node_heights.first
100
+ end
101
+
102
+ it "has a key of 1" do
103
+ inserted_node.key.should == 1
104
+ end
105
+ end
106
+
107
+ describe "and subsequently deleted" do
108
+ before do
109
+ list.delete_node(1)
110
+ end
111
+
112
+ specify "#empty? returns true" do
113
+ list.should be_empty
114
+ end
115
+ end
116
+ end
117
+
118
+ describe " when 1 and 3 have been inserted in order" do
119
+ attr_reader :inserted_nodes
120
+
121
+ def expected_node_heights
122
+ [1, 2]
123
+ end
124
+
125
+ it_should_behave_like "#next_node_height is deterministic"
126
+
127
+ before do
128
+ @inserted_nodes = []
129
+ inserted_nodes << list.insert_node(1)
130
+ inserted_nodes << list.insert_node(3)
131
+ end
132
+
133
+ it_should_behave_like "it is non-empty"
134
+ it_should_behave_like "#nodes is an array of the three inserted nodes in key order"
135
+
136
+ describe "the first inserted node" do
137
+ attr_reader :inserted_node
138
+
139
+ before do
140
+ @inserted_node = inserted_nodes[0]
141
+ end
142
+
143
+ it "has a key of 1" do
144
+ inserted_node.key.should == 1
145
+ end
146
+
147
+ it "has a height of the first expected node height" do
148
+ inserted_node.height.should == expected_node_heights[0]
149
+ end
150
+
151
+ it "has its single forward pointer pointing at the second inserted node" do
152
+ inserted_node.forward[0].should == inserted_nodes[1]
153
+ end
154
+ end
155
+
156
+ describe "the second inserted node" do
157
+ attr_reader :inserted_node
158
+
159
+ before do
160
+ @inserted_node = inserted_nodes[1]
161
+ end
162
+
163
+ it_should_behave_like "it has nil forward pointers"
164
+
165
+ it "has a key of 3" do
166
+ inserted_node.key.should == 3
167
+ end
168
+
169
+ it "has a height of the second expected node height" do
170
+ inserted_node.height.should == expected_node_heights[1]
171
+ end
172
+ end
173
+
174
+ describe "and 1 is subsequently deleted" do
175
+ before do
176
+ list.delete_node(1)
177
+ end
178
+
179
+ describe "the remaining node" do
180
+ attr_reader :inserted_node
181
+
182
+ before do
183
+ @inserted_node = inserted_nodes[1]
184
+ end
185
+
186
+ it "is the first node in the list" do
187
+ inserted_node.should == list.nodes[0]
188
+ end
189
+
190
+ it_should_behave_like "it has nil forward pointers"
191
+ end
192
+ end
193
+
194
+ describe "and 3 is subsequently deleted" do
195
+ before do
196
+ list.delete_node(3)
197
+ end
198
+
199
+ describe "the remaining node" do
200
+ attr_reader :inserted_node
201
+
202
+ before do
203
+ @inserted_node = inserted_nodes[0]
204
+ end
205
+
206
+ it "is the first node in the list" do
207
+ inserted_node.should == list.nodes[0]
208
+ end
209
+
210
+ it_should_behave_like "it has nil forward pointers"
211
+ end
212
+ end
213
+ end
214
+
215
+ describe " when 1, 3 and 7 have been inserted in order" do
216
+ attr_reader :inserted_nodes
217
+
218
+ def expected_node_heights
219
+ [1, 2, 1]
220
+ end
221
+
222
+ it_should_behave_like "#next_node_height is deterministic"
223
+
224
+ before do
225
+ @inserted_nodes = []
226
+ inserted_nodes << list.insert_node(1)
227
+ inserted_nodes << list.insert_node(3)
228
+ inserted_nodes << list.insert_node(7)
229
+ end
230
+
231
+ it_should_behave_like "it is non-empty"
232
+ it_should_behave_like "#nodes is an array of the three inserted nodes in key order"
233
+
234
+ describe "the first inserted node" do
235
+ attr_reader :inserted_node
236
+
237
+ before do
238
+ @inserted_node = inserted_nodes[0]
239
+ end
240
+
241
+ it "has a key of 1" do
242
+ inserted_node.key.should == 1
243
+ end
244
+
245
+ it "has a height of the first expected node height" do
246
+ inserted_node.height.should == expected_node_heights[0]
247
+ end
248
+
249
+ it "has its single forward pointer pointing at the second inserted node" do
250
+ inserted_node.forward[0].should == inserted_nodes[1]
251
+ end
252
+ end
253
+
254
+ describe "the second inserted node" do
255
+ attr_reader :inserted_node
256
+
257
+ before do
258
+ @inserted_node = inserted_nodes[1]
259
+ end
260
+
261
+ it "has a key of 3" do
262
+ inserted_node.key.should == 3
263
+ end
264
+
265
+ it "has a height of the second expected node height" do
266
+ inserted_node.height.should == expected_node_heights[1]
267
+ end
268
+
269
+ it "has a forward pointer at level 0 pointing to the third inserted node" do
270
+ inserted_node.forward[0].should == inserted_nodes[2]
271
+ end
272
+
273
+ it "has nil forward pointer at level 1" do
274
+ inserted_node.forward[1].should be_nil
275
+ end
276
+ end
277
+
278
+ describe "the third inserted node" do
279
+ attr_reader :inserted_node
280
+
281
+ before do
282
+ @inserted_node = inserted_nodes[2]
283
+ end
284
+
285
+ it_should_behave_like "it has nil forward pointers"
286
+
287
+ it "has a key of 3" do
288
+ inserted_node.key.should == 7
289
+ end
290
+
291
+ it "has a height of the third expected node height" do
292
+ inserted_node.height.should == expected_node_heights[2]
293
+ end
294
+ end
295
+
296
+ describe "and 3 is subsequently deleted" do
297
+ before do
298
+ list.delete_node(3)
299
+ end
300
+
301
+ specify "#head points at nil at levels 1 and 2" do
302
+ list.head.forward[1].should be_nil
303
+ list.head.forward[2].should be_nil
304
+ end
305
+
306
+ specify "#nodes contains the remaining nodes in order" do
307
+ list.nodes.should == [inserted_nodes[0], inserted_nodes[2]]
308
+ end
309
+ end
310
+ end
311
+
312
+ describe " when 7, 1 and 3 have been inserted in order" do
313
+ attr_reader :inserted_nodes
314
+
315
+ def expected_node_heights
316
+ [1, 1, 2]
317
+ end
318
+
319
+ it_should_behave_like "#next_node_height is deterministic"
320
+
321
+ before do
322
+ @inserted_nodes = []
323
+ inserted_nodes << list.insert_node(7)
324
+ inserted_nodes << list.insert_node(1)
325
+ inserted_nodes << list.insert_node(3)
326
+ end
327
+
328
+ it_should_behave_like "it is non-empty"
329
+ it_should_behave_like "#nodes is an array of the three inserted nodes in key order"
330
+
331
+ describe "the first inserted node" do
332
+ attr_reader :inserted_node
333
+
334
+ before do
335
+ @inserted_node = inserted_nodes[0]
336
+ end
337
+
338
+ it_should_behave_like "it has nil forward pointers"
339
+
340
+ it "has a key of 7" do
341
+ inserted_node.key.should == 7
342
+ end
343
+
344
+ it "has a height of the first expected node height" do
345
+ inserted_node.height.should == expected_node_heights[0]
346
+ end
347
+ end
348
+
349
+ describe "the second inserted node" do
350
+ attr_reader :inserted_node
351
+
352
+ before do
353
+ @inserted_node = inserted_nodes[1]
354
+ end
355
+
356
+ it "has a key of 1" do
357
+ inserted_node.key.should == 1
358
+ end
359
+
360
+ it "has a height of the second expected node height" do
361
+ inserted_node.height.should == expected_node_heights[1]
362
+ end
363
+
364
+ it "has a forward pointer at level 0 pointing to the second node in the list" do
365
+ inserted_node.forward[0].should == list.nodes[1]
366
+ end
367
+ end
368
+
369
+ describe "the third inserted node" do
370
+ attr_reader :inserted_node
371
+
372
+ before do
373
+ @inserted_node = inserted_nodes[2]
374
+ end
375
+
376
+ it "has a key of 3" do
377
+ inserted_node.key.should == 3
378
+ end
379
+
380
+ it "has a height of the third expected node height" do
381
+ inserted_node.height.should == expected_node_heights[2]
382
+ end
383
+ end
384
+ end
385
+ end