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.
- checksums.yaml +7 -0
- data/.gitignore +16 -0
- data/Gemfile +13 -0
- data/LICENSE.txt +21 -0
- data/README.md +1459 -0
- data/Rakefile +88 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/lib/japanize/base.rb +652 -0
- data/lib/japanize/container.rb +213 -0
- data/lib/japanize/core.rb +194 -0
- data/lib/japanize/enum.rb +127 -0
- data/lib/japanize/errors.rb +79 -0
- data/lib/japanize/globals.rb +109 -0
- data/lib/japanize/io.rb +388 -0
- data/lib/japanize/names.rb +213 -0
- data/lib/japanize/num.rb +319 -0
- data/lib/japanize/process.rb +318 -0
- data/lib/japanize/string.rb +257 -0
- data/lib/japanize/syntax.rb +805 -0
- data/lib/japanize/sys.rb +174 -0
- data/lib/japanize/test_unit.rb +99 -0
- data/lib/japanize/thread.rb +143 -0
- data/lib/japanize/time.rb +82 -0
- data/lib/japanize/version.rb +12 -0
- data/lib/japanize.rb +24 -0
- data/ruby-japanize.gemspec +41 -0
- data/sample/README.md +33 -0
- data/sample/dir.rb +15 -0
- data/sample/eval.rb +48 -0
- data/sample/export.rb +44 -0
- data/sample/fact.rb +17 -0
- data/sample/fib.rb +13 -0
- data/sample/freq.rb +17 -0
- data/sample/fullpath.rb +29 -0
- data/sample/less.rb +19 -0
- data/sample/list.rb +86 -0
- data/sample/list2.rb +22 -0
- data/sample/list3.rb +23 -0
- data/sample/mine.rb +204 -0
- data/sample/mkproto.rb +33 -0
- data/sample/mpart.rb +48 -0
- data/sample/occur.rb +17 -0
- data/sample/occur2.rb +17 -0
- data/sample/philos.rb +57 -0
- data/sample/pi.rb +20 -0
- data/sample/rcs.dat +17 -0
- data/sample/rcs.rb +45 -0
- data/sample/sieve.rb +17 -0
- data/sample/time.rb +14 -0
- data/sample/trojan.rb +18 -0
- data/sample/uumerge.rb +47 -0
- 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:
|