ruby-japanize 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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: