ruby-japanize 0.1.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.
Files changed (53) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +16 -0
  3. data/Gemfile +13 -0
  4. data/LICENSE.txt +21 -0
  5. data/README.md +1459 -0
  6. data/Rakefile +88 -0
  7. data/bin/console +14 -0
  8. data/bin/setup +8 -0
  9. data/lib/japanize/base.rb +652 -0
  10. data/lib/japanize/container.rb +213 -0
  11. data/lib/japanize/core.rb +194 -0
  12. data/lib/japanize/enum.rb +127 -0
  13. data/lib/japanize/errors.rb +79 -0
  14. data/lib/japanize/globals.rb +109 -0
  15. data/lib/japanize/io.rb +388 -0
  16. data/lib/japanize/names.rb +213 -0
  17. data/lib/japanize/num.rb +319 -0
  18. data/lib/japanize/process.rb +318 -0
  19. data/lib/japanize/string.rb +257 -0
  20. data/lib/japanize/syntax.rb +805 -0
  21. data/lib/japanize/sys.rb +174 -0
  22. data/lib/japanize/test_unit.rb +99 -0
  23. data/lib/japanize/thread.rb +143 -0
  24. data/lib/japanize/time.rb +82 -0
  25. data/lib/japanize/version.rb +12 -0
  26. data/lib/japanize.rb +24 -0
  27. data/ruby-japanize.gemspec +41 -0
  28. data/sample/README.md +33 -0
  29. data/sample/dir.rb +15 -0
  30. data/sample/eval.rb +48 -0
  31. data/sample/export.rb +44 -0
  32. data/sample/fact.rb +17 -0
  33. data/sample/fib.rb +13 -0
  34. data/sample/freq.rb +17 -0
  35. data/sample/fullpath.rb +29 -0
  36. data/sample/less.rb +19 -0
  37. data/sample/list.rb +86 -0
  38. data/sample/list2.rb +22 -0
  39. data/sample/list3.rb +23 -0
  40. data/sample/mine.rb +204 -0
  41. data/sample/mkproto.rb +33 -0
  42. data/sample/mpart.rb +48 -0
  43. data/sample/occur.rb +17 -0
  44. data/sample/occur2.rb +17 -0
  45. data/sample/philos.rb +57 -0
  46. data/sample/pi.rb +20 -0
  47. data/sample/rcs.dat +17 -0
  48. data/sample/rcs.rb +45 -0
  49. data/sample/sieve.rb +17 -0
  50. data/sample/time.rb +14 -0
  51. data/sample/trojan.rb +18 -0
  52. data/sample/uumerge.rb +47 -0
  53. metadata +164 -0
@@ -0,0 +1,805 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ require 'japanize/core'
4
+
5
+ 要求 'japanize/base'
6
+ 要求 'japanize/names'
7
+
8
+ 部(:制御構造) {
9
+ 組(:肯否分岐_条件節) {
10
+ 定義(:初期化) {|&塊|
11
+ @条件 = 塊
12
+ }
13
+
14
+ 定義(:であるなら) {|&塊|
15
+ if (@条件[]) then
16
+ 制御構造::肯否分岐_有効な肯定節.新規(塊[])
17
+ else
18
+ 制御構造::肯否分岐_無効な肯定節.新規
19
+ end
20
+ }
21
+
22
+ 定義(:でなければ) {|&塊|
23
+ unless (@条件[]) then
24
+ 制御構造::肯否分岐_有効な否定節.新規(塊[])
25
+ else
26
+ 制御構造::肯否分岐_無効な否定節.新規
27
+ end
28
+ }
29
+ }
30
+
31
+ 組(:肯否分岐_有効な肯定節) {
32
+ 定義(:初期化) {|結果|
33
+ @結果 = 結果
34
+ }
35
+
36
+ 定義(:である) {
37
+ @結果
38
+ }
39
+
40
+ 定義(:でなければ) {|&塊|
41
+ 制御構造::肯否分岐_終了節.新規(@結果)
42
+ }
43
+
44
+ 定義(:もし条件が) {|&塊|
45
+ 制御構造::肯否分岐_無効な継続条件節.新規(@結果)
46
+ }
47
+ }
48
+
49
+ 組(:肯否分岐_無効な肯定節) {
50
+ 定義(:である) {
51
+ 無値
52
+ }
53
+
54
+ 定義(:でなければ) {|&塊|
55
+ 制御構造::肯否分岐_終了節.新規(塊[])
56
+ }
57
+
58
+ 定義(:もし条件が) {|&塊|
59
+ 制御構造::肯否分岐_有効な継続条件節.新規(&塊)
60
+ }
61
+ }
62
+
63
+ 組(:肯否分岐_有効な否定節) {
64
+ 定義(:初期化) {|結果|
65
+ @結果 = 結果
66
+ }
67
+
68
+ 定義(:である) {
69
+ @結果
70
+ }
71
+
72
+ 定義(:であるなら) {|&塊|
73
+ 制御構造::肯否分岐_終了節.新規(@結果)
74
+ }
75
+ }
76
+
77
+ 組(:肯否分岐_無効な否定節) {
78
+ 定義(:である) {
79
+ 無値
80
+ }
81
+
82
+ 定義(:であるなら) {|&塊|
83
+ 制御構造::肯否分岐_終了節.新規(塊[])
84
+ }
85
+ }
86
+
87
+ 組(:肯否分岐_有効な継続条件節) {
88
+ 定義(:初期化) {|&塊|
89
+ @条件 = 塊
90
+ }
91
+
92
+ 定義(:であるなら) {|&塊|
93
+ if (@条件[]) then
94
+ 制御構造::肯否分岐_有効な継続条件の有効な肯定節.新規(塊[])
95
+ else
96
+ 制御構造::肯否分岐_有効な継続条件の無効な肯定節.新規
97
+ end
98
+ }
99
+ }
100
+
101
+ 組(:肯否分岐_無効な継続条件節) {
102
+ 定義(:初期化) {|結果|
103
+ @結果 = 結果
104
+ }
105
+
106
+ 定義(:であるなら) {|&塊|
107
+ 制御構造::肯否分岐_無効な継続条件の肯定節.新規(@結果)
108
+ }
109
+ }
110
+
111
+ 組(:肯否分岐_有効な継続条件の有効な肯定節) {
112
+ 定義(:初期化) {|結果|
113
+ @結果 = 結果
114
+ }
115
+
116
+ 定義(:である) {
117
+ @結果
118
+ }
119
+
120
+ 定義(:もし条件が) {|&塊|
121
+ 制御構造::肯否分岐_無効な継続条件節.新規(@結果)
122
+ }
123
+
124
+ 定義(:でなければ) {
125
+ 制御構造::肯否分岐_終了節.新規(@結果)
126
+ }
127
+ }
128
+
129
+ 組(:肯否分岐_有効な継続条件の無効な肯定節) {
130
+ 定義(:である) {
131
+ 無値
132
+ }
133
+
134
+ 定義(:もし条件が) {|&塊|
135
+ 制御構造::肯否分岐_有効な継続条件節.新規(&塊)
136
+ }
137
+
138
+ 定義(:でなければ) {|&塊|
139
+ 制御構造::肯否分岐_終了節.新規(塊[])
140
+ }
141
+ }
142
+
143
+ 組(:肯否分岐_無効な継続条件の肯定節) {
144
+ 定義(:初期化) {|結果|
145
+ @結果 = 結果
146
+ }
147
+
148
+ 定義(:である) {
149
+ @結果
150
+ }
151
+
152
+ 定義(:もし条件が) {|&塊|
153
+ 制御構造::肯否分岐_無効な継続条件節.新規(@結果)
154
+ }
155
+
156
+ 定義(:でなければ) {|&塊|
157
+ 制御構造::肯否分岐_終了節.新規(@結果)
158
+ }
159
+ }
160
+
161
+ 組(:肯否分岐_終了節) {
162
+ 定義(:初期化) {|結果|
163
+ @結果 = 結果
164
+ }
165
+
166
+ 定義(:である) {
167
+ @結果
168
+ }
169
+ }
170
+
171
+ 組(:条件分岐_開始節) {
172
+ 定義(:初期化) {|&塊|
173
+ @値 = 塊
174
+ }
175
+
176
+ 定義(:もし) {|&塊|
177
+ 制御構造::条件分岐_有効な条件節.新規(@値[], &塊)
178
+ }
179
+
180
+ 定義(:でなければ) {|&塊|
181
+ 制御構造::条件分岐_終了節.新規(塊[])
182
+ }
183
+ }
184
+
185
+ 組(:条件分岐_有効な条件節) {
186
+ 定義(:初期化) {|値, &塊|
187
+ @値 = 値
188
+ @条件 = 塊
189
+ @正規表現が最後に一致した結果 = nil
190
+ }
191
+
192
+ 定義(:条件に合うか?) {
193
+ if (@条件[] === @値) then
194
+ # 条件が正規表現だった場合last_matchはここでしかアクセスできないため、後から参照できるように保存しておく
195
+ @正規表現が最後に一致した結果 = 正規表現.last_match
196
+ 自分
197
+ end
198
+ }
199
+ 秘密 :条件に合うか?
200
+
201
+ 定義(:か) {|&塊|
202
+ 完了 = 条件に合うか?
203
+ 制御構造::条件分岐_有効な追加条件節.新規(@値, 完了, @正規表現が最後に一致した結果, &塊)
204
+ }
205
+
206
+ 定義(:であるなら) {|&塊|
207
+ if (条件に合うか?) then
208
+ # 呼び出し元からアクセスできないのでlast_matchを手続きの引数に渡す
209
+ 制御構造::条件分岐_有効な条件節の有効な肯定節.新規(塊[@正規表現が最後に一致した結果])
210
+ else
211
+ 制御構造::条件分岐_有効な条件節の無効な肯定節.新規(@値)
212
+ end
213
+ }
214
+ }
215
+
216
+ 組(:条件分岐_無効な条件節) {
217
+ 定義(:初期化) {|結果|
218
+ @結果 = 結果
219
+ }
220
+
221
+ 定義(:か) {|&塊|
222
+ 制御構造::条件分岐_無効な追加条件節.新規(@結果)
223
+ }
224
+
225
+ 定義(:であるなら) {|&塊|
226
+ 制御構造::条件分岐_無効な肯定節.新規(@結果)
227
+ }
228
+ }
229
+
230
+ 組(:条件分岐_有効な追加条件節) {
231
+ 定義(:初期化) {|値, 完了, 正規表現が最後に一致した結果, &塊|
232
+ @値 = 値
233
+ @完了 = 完了
234
+ @正規表現が最後に一致した結果 = 正規表現が最後に一致した結果
235
+ @条件 = 塊
236
+ }
237
+
238
+ 定義(:条件に合うか?) {
239
+ if (@完了) then
240
+ 自分
241
+ elsif (@条件[] === @値) then
242
+ # 条件が正規表現だった場合last_matchはここでしかアクセスできないため、後から参照できるように保存しておく
243
+ @正規表現が最後に一致した結果 = 正規表現.last_match
244
+ 自分
245
+ end
246
+ }
247
+ 秘密 :条件に合うか?
248
+
249
+ 定義(:か) {|&塊|
250
+ 完了 = 条件に合うか?
251
+ 制御構造::条件分岐_有効な追加条件節.新規(@値, 完了, @正規表現が最後に一致した結果, &塊)
252
+ }
253
+
254
+ 定義(:であるなら) {|&塊|
255
+ if (条件に合うか?) then
256
+ # 呼び出し元からアクセスできないのでlast_matchを手続きの引数に渡す
257
+ 制御構造::条件分岐_有効な条件節の有効な肯定節.新規(塊[@正規表現が最後に一致した結果])
258
+ else
259
+ 制御構造::条件分岐_有効な条件節の無効な肯定節.新規(@値)
260
+ end
261
+ }
262
+ }
263
+
264
+ 組(:条件分岐_無効な追加条件節) {
265
+ 定義(:初期化) {|結果|
266
+ @結果 = 結果
267
+ }
268
+
269
+ 定義(:か) {|&塊|
270
+ 自分
271
+ }
272
+
273
+ 定義(:であるなら) {
274
+ 制御構造::条件分岐_無効な肯定節.新規(@結果)
275
+ }
276
+ }
277
+
278
+ 組(:条件分岐_有効な条件節の有効な肯定節) {
279
+ 定義(:初期化) {|結果|
280
+ @結果 = 結果
281
+ }
282
+
283
+ 定義(:である) {
284
+ @結果
285
+ }
286
+
287
+ 定義(:でなければ) {|&塊|
288
+ 制御構造::条件分岐_終了節.新規(@結果)
289
+ }
290
+
291
+ 定義(:もし) {|&塊|
292
+ 制御構造::条件分岐_無効な条件節.新規(@結果)
293
+ }
294
+ }
295
+
296
+ 組(:条件分岐_有効な条件節の無効な肯定節) {
297
+ 定義(:初期化) {|値|
298
+ @値 = 値
299
+ }
300
+
301
+ 定義(:である) {
302
+ 無値
303
+ }
304
+
305
+ 定義(:でなければ) {|&塊|
306
+ 制御構造::条件分岐_終了節.新規(塊[])
307
+ }
308
+
309
+ 定義(:もし) {|&塊|
310
+ 制御構造::条件分岐_有効な条件節.新規(@値, &塊)
311
+ }
312
+ }
313
+
314
+ 組(:条件分岐_無効な肯定節) {
315
+ 定義(:初期化) {|結果|
316
+ @結果 = 結果
317
+ }
318
+
319
+ 定義(:である) {
320
+ @結果
321
+ }
322
+
323
+ 定義(:でなければ) {|&塊|
324
+ 制御構造::条件分岐_終了節.新規(@結果)
325
+ }
326
+
327
+ 定義(:もし) {|&塊|
328
+ 制御構造::条件分岐_無効な条件節.新規(@結果)
329
+ }
330
+ }
331
+
332
+ 組(:条件分岐_終了節) {
333
+ 定義(:初期化) {|結果|
334
+ @結果 = 結果
335
+ }
336
+
337
+ 定義(:である) {
338
+ @結果
339
+ }
340
+ }
341
+
342
+ 組(:手続きの制御) {
343
+ 定義(:初期化) {|外側の目印, 内側の目印|
344
+ @外側の目印 = 外側の目印
345
+ @内側の目印 = 内側の目印
346
+ }
347
+
348
+ 定義(:終わる) {|返り値=無値|
349
+ 脱出(@外側の目印, 返り値)
350
+ }
351
+
352
+ 定義(:次へ進む) {|返り値=無値|
353
+ 脱出(@内側の目印, [ :次へ進む, 返り値 ])
354
+ }
355
+
356
+ 定義(:やり直す) {
357
+ 脱出(@内側の目印, :やり直す)
358
+ }
359
+ }
360
+
361
+ 定義(:手続きを渡す) {|ある物, 操作の名前, *引数, 秘密の操作を許可: 偽値, **名前付き引数, &塊|
362
+ if (秘密の操作を許可) then
363
+ if (名前付き引数.empty?) then
364
+ 実行 = 手続き{|&塊| ある物.__send__(操作の名前, *引数, &塊) }
365
+ else
366
+ 実行 = 手続き{|&塊| ある物.__send__(操作の名前, *引数, **名前付き引数, &塊) }
367
+ end
368
+ else
369
+ if (名前付き引数.empty?) then
370
+ 実行 = 手続き{|&塊| ある物.public_send(操作の名前, *引数, &塊) }
371
+ else
372
+ 実行 = 手続き{|&塊| ある物.public_send(操作の名前, *引数, **名前付き引数, &塊) }
373
+ end
374
+ end
375
+
376
+ 外側の目印 = 物.新規
377
+ 内側の目印 = 物.新規
378
+ 制御 = 制御構造::手続きの制御.新規(外側の目印, 内側の目印)
379
+
380
+ 捕捉(外側の目印) {
381
+ 実行[制御] {|*引数|
382
+ 返り値 = 無値
383
+ 命令, 次の返り値 = 捕捉(内側の目印) {
384
+ 返り値 = 塊[制御, *引数]
385
+ 無値
386
+ }
387
+
388
+ case (命令)
389
+ when :次へ進む
390
+ next 次の返り値
391
+ when :やり直す
392
+ redo
393
+ end
394
+
395
+ 返り値
396
+ }
397
+ }
398
+ }
399
+ 部の関数 :手続きを渡す
400
+
401
+ 組(:繰り返しの制御) {
402
+ 定義(:初期化) {|外側の目印, 内側の目印|
403
+ @外側の目印 = 外側の目印
404
+ @内側の目印 = 内側の目印
405
+ }
406
+
407
+ 定義(:終わる) {|返り値=無値|
408
+ 脱出(@外側の目印, 返り値)
409
+ }
410
+
411
+ 定義(:次へ進む) {
412
+ 脱出(@内側の目印, :次へ進む)
413
+ }
414
+
415
+ 定義(:やり直す) {
416
+ 脱出(@内側の目印, :やり直す)
417
+ }
418
+ }
419
+
420
+ 組(:成立条件の繰り返し) {
421
+ 定義(:初期化) {|&塊|
422
+ @条件 = 塊
423
+ }
424
+
425
+ 定義(:繰り返す) {|&塊|
426
+ if (塊.parameters.empty?) then
427
+ while (@条件[])
428
+ 塊[]
429
+ end
430
+
431
+ 無値
432
+ else
433
+ 外側の目印 = 物.新規
434
+ 内側の目印 = 物.新規
435
+ 制御 = 制御構造::繰り返しの制御.新規(外側の目印, 内側の目印)
436
+
437
+ 捕捉(外側の目印) {
438
+ while (@条件[])
439
+ 命令 = 捕捉(内側の目印) {
440
+ 塊[制御]
441
+ 無値
442
+ }
443
+
444
+ case (命令)
445
+ when :次へ進む
446
+ next
447
+ when :やり直す
448
+ redo
449
+ end
450
+ end
451
+
452
+ 無値
453
+ }
454
+ end
455
+ }
456
+ }
457
+
458
+ 組(:到達条件の繰り返し) {
459
+ 定義(:初期化) {|&塊|
460
+ @条件 = 塊
461
+ }
462
+
463
+ 定義(:繰り返す) {|&塊|
464
+ if (塊.parameters.empty?) then
465
+ until (@条件[])
466
+ 塊[]
467
+ end
468
+ else
469
+ 外側の目印 = 物.新規
470
+ 内側の目印 = 物.新規
471
+ 制御 = 制御構造::繰り返しの制御.新規(外側の目印, 内側の目印)
472
+
473
+ 捕捉(外側の目印) {
474
+ until (@条件[])
475
+ 命令 = 捕捉(内側の目印) {
476
+ 塊[制御]
477
+ 無値
478
+ }
479
+
480
+ case (命令)
481
+ when :次へ進む
482
+ next
483
+ when :やり直す
484
+ redo
485
+ end
486
+ end
487
+
488
+ 無値
489
+ }
490
+ end
491
+ }
492
+ }
493
+
494
+ 組(:後置条件の繰り返し) {
495
+ 定義(:初期化) {|&塊|
496
+ @繰り返し = 塊
497
+ }
498
+
499
+ 定義(:この条件なら) {|&条件|
500
+ if (@繰り返し.parameters.empty?) then
501
+ begin
502
+ @繰り返し[]
503
+ end while (条件[])
504
+
505
+ 無値
506
+ else
507
+ 外側の目印 = 物.新規
508
+ 内側の目印 = 物.新規
509
+ 制御 = 制御構造::繰り返しの制御.新規(外側の目印, 内側の目印)
510
+
511
+ 捕捉(外側の目印) {
512
+ begin
513
+ 命令 = 捕捉(内側の目印) {
514
+ @繰り返し[制御]
515
+ 無値
516
+ }
517
+
518
+ case (命令)
519
+ when :次へ進む
520
+ next
521
+ when :やり直す
522
+ redo
523
+ end
524
+ end while (条件[])
525
+
526
+ 無値
527
+ }
528
+ end
529
+ }
530
+
531
+ 定義(:この条件まで) {|&条件|
532
+ if (@繰り返し.parameters.empty?) then
533
+ begin
534
+ @繰り返し[]
535
+ end until (条件[])
536
+ else
537
+ 外側の目印 = 物.新規
538
+ 内側の目印 = 物.新規
539
+ 制御 = 制御構造::繰り返しの制御.新規(外側の目印, 内側の目印)
540
+
541
+ 捕捉(外側の目印) {
542
+ begin
543
+ 命令 = 捕捉(内側の目印) {
544
+ @繰り返し[制御]
545
+ 無値
546
+ }
547
+
548
+ case (命令)
549
+ when :次へ進む
550
+ next
551
+ when :やり直す
552
+ redo
553
+ end
554
+ end until (条件[])
555
+
556
+ 無値
557
+ }
558
+ end
559
+ }
560
+ }
561
+
562
+ 定義(:列挙できる物を繰り返す) {|列挙できる物, &塊|
563
+ 外側の目印 = 物.新規
564
+ 内側の目印 = 物.新規
565
+ 制御 = 制御構造::繰り返しの制御.新規(外側の目印, 内側の目印)
566
+
567
+ 捕捉(外側の目印) {
568
+ for *項目 in 列挙できる物
569
+ 命令 = 捕捉(内側の目印) {
570
+ 塊[制御, *項目]
571
+ 無値
572
+ }
573
+
574
+ case (命令)
575
+ when :次へ進む
576
+ next
577
+ when :やり直す
578
+ redo
579
+ end
580
+ end
581
+ }
582
+ }
583
+ 部の関数 :列挙できる物を繰り返す
584
+
585
+ 定義(:無限に循環する) {|&塊|
586
+ if (塊.parameters.empty?) then
587
+ loop(&塊)
588
+ else
589
+ 外側の目印 = 物.新規
590
+ 内側の目印 = 物.新規
591
+ 制御 = 制御構造::繰り返しの制御.新規(外側の目印, 内側の目印)
592
+
593
+ 捕捉(外側の目印) {
594
+ loop do
595
+ 命令 = 捕捉(内側の目印) {
596
+ 塊[制御]
597
+ 無値
598
+ }
599
+
600
+ case (命令)
601
+ when :次へ進む
602
+ next
603
+ when :やり直す
604
+ redo
605
+ end
606
+ end
607
+ }
608
+ end
609
+ }
610
+ 部の関数 :無限に循環する
611
+
612
+ 組(:領域の例外処理) {
613
+ 定義(:初期化) {|例外の型, 例外の処理|
614
+ @例外の型 = 例外の型
615
+ @例外の処理 = 例外の処理
616
+ }
617
+
618
+ 定義(:処理対象の例外か?) {|ある例外|
619
+ ある例外.一種か? @例外の型
620
+ }
621
+
622
+ 定義(:[]) {|発生した例外|
623
+ @例外の処理[発生した例外]
624
+ }
625
+ }
626
+
627
+ 組(:領域の折り返し処理) {
628
+ 定義(:初期化) {
629
+ @本処理 = 無値
630
+ @後始末 = 無値
631
+ @例外処理の一覧 = []
632
+ @例外が無い時の処理 = 無値
633
+ }
634
+
635
+ 読み取り属性 :本処理
636
+ 読み取り属性 :後始末
637
+ 読み取り属性 :例外処理の一覧
638
+ 読み取り属性 :例外が無い時の処理
639
+
640
+ 定義(:本処理を設定) {|&塊|
641
+ @本処理 = 塊
642
+ 無値
643
+ }
644
+
645
+ 定義(:後始末を設定) {|&塊|
646
+ @後始末 = 塊
647
+ 無値
648
+ }
649
+
650
+ 定義(:例外処理を追加) {|例外の型, &塊|
651
+ @例外処理の一覧 << 制御構造::領域の例外処理.新規(例外の型, 塊)
652
+ 無値
653
+ }
654
+
655
+ 定義(:例外が無い時の処理を設定) {|&塊|
656
+ @例外が無い時の処理 = 塊
657
+ 無値
658
+ }
659
+ }
660
+
661
+ 組(:領域の制御) {
662
+ 定義(:初期化) {|外側の目印, 内側の目印, 折り返し処理|
663
+ @外側の目印 = 外側の目印
664
+ @内側の目印 = 内側の目印
665
+ @折り返し処理 = 折り返し処理
666
+ }
667
+
668
+ 定義(:戻る) {|*引数|
669
+ if (引数.empty?) then
670
+ 脱出(@外側の目印)
671
+ elsif (引数.length == 1) then
672
+ 脱出(@外側の目印, 引数[0])
673
+ else
674
+ 脱出(@外側の目印, 引数)
675
+ end
676
+ }
677
+
678
+ 定義(:やり直す) {
679
+ 脱出(@内側の目印, 真値)
680
+ }
681
+
682
+ 定義(:本処理) {|&塊|
683
+ @折り返し処理.本処理を設定(&塊)
684
+ }
685
+
686
+ 定義(:例外を捕捉) {|例外の型=標準的な失敗, *追加の例外の一覧, &塊|
687
+ @折り返し処理.例外処理を追加(例外の型, &塊)
688
+ for 追加の例外の型 in 追加の例外の一覧
689
+ @折り返し処理.例外処理を追加(追加の例外の型, &塊)
690
+ end
691
+ }
692
+
693
+ 定義(:例外が無い時) {|&塊|
694
+ @折り返し処理.例外が無い時の処理を設定(&塊)
695
+ }
696
+
697
+ 定義(:後始末) {|&塊|
698
+ @折り返し処理.後始末を設定(&塊)
699
+ }
700
+ }
701
+
702
+ 定義(:領域) {|&塊|
703
+ 外側の目印 = 物.新規
704
+ 内側の目印 = 物.新規
705
+ 折り返し処理 = 制御構造::領域の折り返し処理.新規
706
+ 制御 = 制御構造::領域の制御.新規(外側の目印, 内側の目印, 折り返し処理)
707
+
708
+ 捕捉(外側の目印) {
709
+ 戻り値 = 塊[制御]
710
+
711
+ if (折り返し処理.本処理) then
712
+ begin
713
+ begin
714
+ 繰り返すか = 捕捉(内側の目印) {
715
+ begin
716
+ 戻り値 = 折り返し処理.本処理[]
717
+ rescue 例外 => 発生した例外
718
+ 例外処理 = 折り返し処理.例外処理の一覧.find{|ある例外処理|
719
+ ある例外処理.処理対象の例外か? 発生した例外
720
+ }
721
+ if (例外処理) then
722
+ 戻り値 = 例外処理[発生した例外]
723
+ else
724
+ 例外を発生
725
+ end
726
+ else
727
+ if (折り返し処理.例外が無い時の処理) then
728
+ 戻り値 = 折り返し処理.例外が無い時の処理[]
729
+ end
730
+ end
731
+
732
+ 偽値
733
+ }
734
+ end while (繰り返すか)
735
+ ensure
736
+ if (折り返し処理.後始末) then
737
+ 折り返し処理.後始末[]
738
+ end
739
+ end
740
+ end
741
+
742
+ 戻り値
743
+ }
744
+ }
745
+ 部の関数 :領域
746
+ }
747
+
748
+ 部(:制御命令) {
749
+ 定義(:もし条件が) {|&塊|
750
+ 制御構造::肯否分岐_条件節.新規(&塊)
751
+ }
752
+ 部の関数 :もし条件が
753
+
754
+ 定義(:この値が) {|&塊|
755
+ 制御構造::条件分岐_開始節.新規(&塊)
756
+ }
757
+ 部の関数 :この値が
758
+
759
+ 定義(:この条件なら) {|&塊|
760
+ 制御構造::成立条件の繰り返し.新規(&塊)
761
+ }
762
+ 部の関数 :この条件なら
763
+
764
+ 定義(:この条件まで) {|&塊|
765
+ 制御構造::到達条件の繰り返し.新規(&塊)
766
+ }
767
+ 部の関数 :この条件まで
768
+
769
+ # 物の公開された操作として定義
770
+ 定義(:手続きを渡す) {|操作の名前, *引数, 秘密の操作を許可: 偽値, **名前付き引数, &塊|
771
+ 制御構造.手続きを渡す(自分, 操作の名前, *引数, 秘密の操作を許可: 秘密の操作を許可, **名前付き引数, &塊)
772
+ }
773
+
774
+ 定義(:繰り返す) {|*引数, &塊|
775
+ unless (引数.empty?) then
776
+ 制御構造.列挙できる物を繰り返す(*引数, &塊)
777
+ else
778
+ 制御構造::後置条件の繰り返し.新規(&塊)
779
+ end
780
+ }
781
+ 部の関数 :繰り返す
782
+
783
+ # 核の定義を上書きする
784
+ 定義(:循環) {|&塊|
785
+ 制御構造.無限に循環する(&塊)
786
+ }
787
+ 部の関数 :循環
788
+
789
+ 定義(:領域) {|&塊|
790
+ 制御構造.領域(&塊)
791
+ }
792
+ 部の関数 :領域
793
+ }
794
+ 付加 制御命令
795
+
796
+ 組(列挙) {
797
+ 定義(:繰り返す) {|&塊|
798
+ 制御命令.繰り返す(自分, &塊)
799
+ }
800
+ }
801
+
802
+ # Local Variables:
803
+ # mode: Ruby
804
+ # indent-tabs-mode: nil
805
+ # End: