OSDN Git Service

3ae7123c9de0d0c42ce483574d2e31105983eb0a
[ring-lang-081/ring.git] / docs / build / html / _sources / syntaxflexibility.txt
1 .. index:: 
2         single: シンタックスの柔軟性; はじめに
3
4 ====================
5 シンタックスの柔軟性
6 ====================
7
8 Ring コンパイラに標準装備されているシンタックスの柔軟性に関する選択肢を学びます。
9
10 .. index:: 
11         pair: シンタックスの柔軟性; キーワード変更
12
13 キーワードの変更
14 ================
15
16 ChangeRingKeyword 命令はキーワードを変更します。
17
18 .. note:: 共同プロジェクトのチーム間で記法の混用があるときは、キーワードの復元を心がけてください。
19
20
21 .. tip:: ChangeRingKeyword 命令は字句解析の段階でコンパイラにより実行されます (構文解析の前に)。
22
23
24 文法:
25
26 .. code-block:: ring
27         
28         ChangeRingKeyword  <旧キーワード>  <新キーワード>
29
30 用例:
31
32 .. code-block:: ring
33
34         ChangeRingKeyword see print
35         
36         print "welcome" + nl
37
38         ChangeRingKeyword print see
39
40         see "Welcome" + nl
41
42 用例:
43
44 .. code-block:: ring
45
46         ChangeRingKeyword  func function
47         ChangeRingKeyword  see  print
48         ChangeRingKeyword  ok   endif
49         ChangeRingKeyword  next endfor
50         ChangeRingKeyword  end  endwhile
51
52         x = 10
53         while x > 0
54                 print "x = " + x + nl
55                 for t = 1 to 10
56                         if t = 3
57                                 print "number three" + nl
58                         endif
59                 endfor  
60
61         x--
62         endwhile
63
64         test() 
65
66         function test
67                 print "message from test" + nl
68
69         ChangeRingKeyword  function func
70         ChangeRingKeyword  print see
71         ChangeRingKeyword  endif ok
72         ChangeRingKeyword  endfor next
73         ChangeRingKeyword  endwhile end
74
75
76 .. index:: 
77         pair: シンタックスの柔軟性; 演算子の変更
78
79 演算子の変更
80 ============
81
82 ChangeRingOperator 命令は演算子を変更します。
83
84 .. note:: 共同プロジェクトのチーム間で記法の混用があるときは、演算子の復元を心がけてください。
85
86 .. tip:: ChangeRingOperartor 命令は字句解析の段階でコンパイラにより実行されます (構文解析の前に)。
87
88
89 文法:
90
91 .. code-block:: ring
92         
93         ChangeRingOperator  <旧キーワード>  <新キーワード>
94
95 用例:
96
97 このプログラムは、 + 演算子を _+ へ変更することで隠します。
98
99 .. code-block:: ring
100
101         changeringoperator + _+
102         changeringkeyword SEE PRINT
103
104         try
105                 print 5 + 10
106         catch
107                 print nl print "error" print nl
108         done
109
110         changeringoperator _+ +
111
112 このプログラムは、 + 演算子を “plus” へ変更します。
113
114 .. code-block:: ring
115
116         changeringoperator + plus 
117         changeringkeyword SEE PRINT
118
119         Print 5 plus 5  
120
121         changeringoperator plus +
122         changeringkeyword PRINT SEE 
123
124 .. index:: 
125         pair: シンタックスの柔軟性; シンタックスファイルの読み込み
126
127
128 シンタックスファイルの読み込み
129 ==============================
130
131 複数のソースファイルから後で使用するために、ファイルへ ChangeRingKeyword と ChangeRingOperator 命令のグループを格納です。
132 これらのファイルを呼び出すため、 Load 命令は使用できません。理由として、
133
134 * ChangeRingKeyword および ChangeRingOperator 命令は字句解析の段階で、コンパイラにより実行されます (構文解析の前に)。
135 * Load 命令は構文解析の段階で実行されます (字句解析後の段階で)。
136
137 解決方法: LoadSyntax 命令を字句解析の段階で実行します。
138
139 文法:
140
141 .. code-block:: ring
142
143         LoadSyntax      "syntaxfile.ring"
144
145 用例:
146
147 ファイル : StyleBasicOn.ring
148
149 .. code-block:: ring
150
151         ChangeRingKeyword       see     print
152         ChangeRingKeyword       ok      endif
153         ChangeRingKeyword       next    endfor
154         ChangeRingKeyword       end     endwhile
155
156 ファイル : StyleBasicOff.ring
157
158 .. code-block:: ring
159
160         ChangeRingKeyword  print        see
161         ChangeRingKeyword  endif        ok
162         ChangeRingKeyword  endfor       next
163         ChangeRingKeyword  endwhile     end
164
165 ファイル : UseStyleBasic.ring
166
167 .. code-block:: ring
168
169         LoadSyntax "stylebasicon.ring"
170
171         x = 10
172         while x > 0
173                 print "x = " + x + nl
174                 for t = 1 to 10
175                         if t = 3
176                                 print "number three" + nl
177                         endif
178                 endfor  
179                 x--
180         endwhile
181
182         LoadSyntax "stylebasicoff.ring"
183
184         see "done" + nl
185
186 .. note:: LoadSyntax 命令により呼び出されるファイルの内容は ChangeRingKeyword と ChangeRingOperator 命令のみ記述してください。
187
188 .. tip:: LoadSyntax により呼び出されたファイルは関数、パッケージおよびクラスには対応していません。命令型の命令のみ対応しています。
189
190 .. note:: この機能により、同じプロジェクトで使用できる多種多様な記法を作成できます。また、 Ring の訳文では日本語、アラビア語、フランス語などの自然言語に対応できます。
191
192 .. tip:: LoadSyntax 命令の効果は、現在のソースコードに関連するものだけに限られます (ファイルスコープ)。
193         
194
195 .. index:: 
196         pair: シンタックスの柔軟性; 関数の引数を“()” で囲うには
197
198 関数の引数を“()” で囲うには
199 =============================
200
201 関数の引数は“()”で囲います (オプション扱い)。
202
203 用例:
204
205 .. code-block:: ring
206
207         hello()
208         sum(3,4)
209
210         func hello()
211                 see "Hello" + nl
212
213         func sum(x,y)
214                 see x+y+nl
215         
216 実行結果:
217
218 .. code-block:: ring
219
220         Hello
221         7
222
223 用例:
224
225 .. code-block:: ring
226
227         myfunc = func x,y { see x + y + nl }
228
229         call myfunc (3,4)
230
231         myfunc2 = func (x,y) { see x+y+nl }
232
233         call myfunc(3,4)
234
235 実行結果:
236
237 .. code-block:: ring
238
239         7
240         7
241
242 .. index:: 
243         pair: シンタックスの柔軟性; ステートメントの末尾および間でセミコロンを使うには
244
245 ステートメントの末尾および間でセミコロンを使うには
246 ==================================================
247
248 Ring ではステートメントの末尾、および間でセミコロンを使えます (オプション扱い)。
249
250 用例:
251
252 .. code-block:: ring
253
254         # セミコロンの使用はオプション扱いです。
255
256         see "Hello" + nl ; see "How are you?" + nl  ; see "Welcome to Ring" + nl ;
257         one() ; two() ; three() ;
258         func one ; see "one" + nl ;
259         func two ; see "two" + nl ;
260         func three ; see "three" + nl ;
261
262
263 実行結果:
264
265 .. code-block:: ring
266
267
268         Hello
269         How are you?
270         Welcome to Ring
271         one
272         two
273         three
274
275 .. index:: 
276         pair: シンタックスの柔軟性; 変数名に $ と @ を使うには
277
278 変数名に $ と @ を使うには
279 ==========================
280
281 変数名には Unicode 文字に加えて $ と @ を使用することもできます。
282
283 この機能は便利です。例えば、グローバル変数は $ で、そしてオブジェクトの属性は @ で書き始められます。
284
285 これは Ruby などでは規則ですが、 Ring ではコンパイラへ影響を及ぼさないオプション扱いのものです。
286
287 用例:
288
289 .. code-block:: ring
290
291         $global_variable = 5
292
293         new test { hello() }    
294
295         class test
296
297                 @instance_variable = 10
298
299                 func hello
300
301                         local_variable = 15
302
303                         see "Global   : " + $global_variable + nl + 
304                             "Instance : " + @instance_variable + nl +
305                             "Local    : " + local_variable + nl
306
307 実行結果:
308
309
310 .. code-block:: ring
311
312         Global   : 5
313         Instance : 10
314         Local    : 15
315
316 .. index:: 
317         pair: シンタックスの柔軟性; If ステートメントで‘but’の代わりに‘elseif’キーワードを使うには
318
319 If ステートメントで‘but’の代わりに‘elseif’キーワードを使うには
320 ==================================================================
321
322 If ステートメントで‘but’を使いたくないときは、
323 ‘elseif’キーワードへ変更できます。
324
325 用例:
326
327 .. code-block:: ring
328
329         give x
330         if x = 1 see "one"
331         elseif x=2 see "two"
332         elseif x=3 see "three"
333         elseif x=4 see "four"
334         else see "other"
335         ok
336         see nl
337
338 .. index:: 
339         pair: シンタックスの柔軟性; Switch ステートメントで‘other’の代わりに‘else’キーワードを使うには
340
341 Switch ステートメントで‘other’の代わりに‘else’キーワードを使うには
342 ======================================================================
343
344 Switch ステートメントで‘other’を使いたくないときは、
345 ‘else’キーワードへ変更できます。
346
347 また If ステートメントで‘else’を‘other’キーワードへ置き換えることもできます。
348
349 つまり‘other’キーワードは‘else’キーワードと同じ扱いです。
350
351 用例:
352
353 .. code-block:: ring
354
355         x = 1
356         switch x
357                 on 10 
358                         see "10" + nl
359                 else 
360                         see "not 10" + nl
361         end
362
363 実行結果:
364
365 .. code-block:: ring
366
367         not 10
368
369 .. index:: 
370         pair: シンタックスの柔軟性; 制御構造で‘end’キーワードを使うには
371
372 制御構造で‘end’キーワードを使うには
373 =====================================
374
375 ‘end’ キーワードは制御構造を閉じます。
376
377 * If ステートメント
378 * For ループ
379 * Switch
380 * While
381 * Try ~ Catch
382
383 用例:
384
385 .. code-block:: ring
386
387         see "if statement.." + nl
388         x = 1
389         if x = 1 
390                 see "one" + nl
391         elseif x=2 
392                 see "two" + nl
393         elseif x=3 
394                 see "three" + nl
395         end
396         see "for loop.." + nl
397         for t = 1 to 10
398                 see t 
399         end
400         see nl
401         see "switch..." + nl
402         x = 1
403
404         switch x
405                 on 1 see "one" + nl
406                 on 2 see "two" + nl
407         end
408
409         see "try catch..." + nl
410         try
411                 x = 1 / 0
412         catch
413                 see "catching error" + nl
414         end
415
416 実行結果:
417
418 .. code-block:: ring
419
420         if statement..
421         one
422         for loop..
423         12345678910
424         switch...
425         one
426         try catch...
427         catching error
428
429 .. index:: 
430         pair: シンタックスの柔軟性; 制御構造の開始と終了で括弧 { } を使うには
431
432 制御構造の開始と終了で括弧 { } を使うには
433 =========================================
434
435 制御構造の開始と終了で括弧 { } を使えます。
436
437 * If ステートメント
438 * For ループ
439 * Switch
440 * While
441 * Try ~ Catch
442
443 用例:
444
445 .. code-block:: ring
446
447         see "if statement.." + nl
448         x = 1
449         if x = 1 {
450                 see "one" + nl
451         elseif x=2 
452                 see "two" + nl
453         elseif x=3 
454                 see "three" + nl
455         }
456         see "for loop.." + nl
457         for t = 1 to 10 {
458                 see t 
459         }
460         see nl
461         see "switch..." + nl
462         x = 1
463
464         switch x {
465                 on 1 see "one" + nl
466                 on 2 see "two" + nl
467         }
468
469         see "try catch..." + nl
470         try {
471                 x = 1 / 0
472         catch
473                 see "catching error" + nl
474         }
475
476 実行結果:
477
478 .. code-block:: ring
479
480         if statement..
481         one
482         for loop..
483         12345678910
484         switch...
485         one
486         try catch...
487         catching error
488
489
490 .. index:: 
491         pair: シンタックスの柔軟性; ‘see’と‘give’ の代わりに‘put’と‘get’を使うには
492
493 ‘see’と‘give’ の代わりに‘put’と‘get’を使うには
494 ======================================================
495
496 ‘see’キーワードを‘put’キーワードへ置き換えられます。
497
498 また‘give’キーワードを‘get’キーワードへ置き換えることもできます。
499
500 用例:
501
502 .. code-block:: ring
503
504         put "Hello World" + nl
505         put "Enter Your Name ? " Get Name
506         Put "Hello " + Name
507
508 .. index:: 
509         pair: シンタックスの柔軟性; Switch ステートメントで‘on’の代わりに‘case’を使うには
510
511 Switch ステートメントで‘on’の代わりに‘case’を使うには
512 =========================================================
513
514 Switch ステートメントで‘on’キーワードを‘case’キーワードへ置き換えられます。
515
516 用例① :
517
518 .. code-block:: ring
519
520         for x=1 to 10 
521                 switch x 
522                 case 1 put "one" + nl
523                 case 2 put "two" + nl
524                 case 3 put "thre" + nl
525                 else put "else" + nl
526                 end
527         end
528
529 用例② :
530
531 .. code-block:: ring
532
533         for x=1 to 10 {
534                 switch x {
535                 case 1 put "one" + nl
536                 case 2 put "two" + nl
537                 case 3 put "thre" + nl
538                 else put "else" + nl
539                 }
540         }
541
542
543 .. index:: 
544         pair: シンタックスの柔軟性; 関数とメソッドの定義で‘func’の代わりに‘def’を使うには
545
546 関数とメソッドの定義で‘func’の代わりに‘def’を使うには
547 =========================================================
548
549 関数、およびメソッドの定義で ‘func’ の代わりに ‘def’ キーワードを使えます。
550
551 用例:
552
553 .. code-block:: ring
554
555         one() two()
556
557         def one put "one" + nl
558         def two put "two" + nl
559
560 .. index:: 
561         pair: シンタックスの柔軟性; Package/Class/Function で括弧 { } を使うには
562
563 Package/Class/Function で括弧 { } を使うには
564 ============================================
565
566 用例:
567
568 .. code-block:: ring
569
570         load "stdlib.ring"
571
572         import mypackage
573
574         new myclass {
575                 myfunc() 
576         }
577
578         package mypackage 
579         {
580                 class myclass 
581                 {
582                         func myfunc 
583                         {
584                                 print("Hello, World!\n")
585                         }
586                 }
587         }
588
589 .. index:: 
590         pair: シンタックスの柔軟性; Package/Class/Function キーワードの後で‘end’を使うには
591
592 Package/Class/Function キーワードの後で‘end’を使うには
593 ========================================================
594
595 用例:
596
597 .. code-block:: ring
598
599         import mypackage
600
601         new myclass {
602                 myfunc() 
603         }
604
605         package mypackage 
606                 class myclass 
607                         def myfunc 
608                                 put "Hello, World!"
609                         end
610                 end
611         end
612
613 .. index:: 
614         pair: シンタックスの柔軟性; Package/Class/Function キーワードの後で‘endpackage’/’endclass’/’endfunc’を使うには
615
616 Package/Class/Function キーワードの後で‘endpackage’/’endclass’/’endfunc’を使うには
617 ========================================================================================
618
619 用例:
620
621 .. code-block:: ring
622
623         import mypackage
624
625         new myclass { myfunc() }
626
627         package mypackage
628                 class myclass
629                         func myfunc                     
630                                 see "welcome"  + nl
631                         endfunc
632                 endclass
633         endpackage
634
635
636 .. index:: 
637         pair: シンタックスの柔軟性; キーワードの後にくる行を無視
638
639 キーワードの後にくる行を無視
640 ============================
641
642 Ring 1.8 からコンパイラは、キーワードの後に続く行をトークンとみなして無視するようになりました。
643
644 用例:
645
646 .. code-block:: ring
647
648         see 
649         "
650                 Hello, World!
651         "
652         test()
653
654         func 
655         #======================#
656                 Test
657         #======================#
658
659                 ?
660                 "
661         
662                 Hello from the Test function
663
664                 "
665
666 実行結果:
667
668 .. code-block:: none
669
670
671                 Hello, World!
672
673
674                 Hello from the Test function
675