2 single: 自然言語プログラミング; はじめに
8 プログラミング言語 Ring でクラスとオブジェクトを土台にした自然プログラミング言語を作成できます。
16 2010年にプログラミング言語 Supernova の新規開発で Programming Without Coding Technology (PWCT) を使用しました。
17 Supernova は自然言語ステートメントと類似の記法によるコードで GUI アプリケーションを簡単に作成できます。
18 五年後、いまでは同様の成果を Ring で得ることができます。さらに好みや必要に応じて、
19 どのような問題領域であっても自然言語ステートメントに類似したコードの作成、使用する能力があります。
21 Ring は Supernova の精神を受け継いでおり、そのほかにも多種様々な汎用プログラミング言語の精神を受け継いでいます。
29 この用例は、二つの命令を定義するクラスの作成方法です。
31 最初の命令は : I want window
33 次の命令は : Window title = <式>
35 また ‘the’ などのキーワードは無視します。
42 The window title = "hello world"
51 # ここで window 属性の再定義を行いません。
70 see "Instruction : I want window" + nl
79 see "Instruction : Window Title = " + cValue + nl
87 Instruction : I want window
88 Instruction : Window Title = hello world
92 pair: 自然言語プログラミング; キーワード‘And’の変更'
95 =======================
97 ‘and’で二つの命令同士をつなげたい場合があります。
99 ‘and’ は Ring のキーワードであるため、問題がありますが、
101 ChangeRingKeyword 命令により変更できます。
107 ChangeRingKeyword <変更元のキーワード> <変更先のキーワード>
109 .. note:: キーワードの復元をお忘れなく。
111 .. tip:: ChangeRingKeyword 命令はコンパイラにより、字句解析段階で実行されます (構文解析の前に)。
117 ChangeRingKeyword and _and
121 I want window and the window title = "hello world"
126 # I want window 命令の属性
130 # ここで window 属性の再定義を行いません。
133 # 値を与えると、キーワードは無視されます。
136 ChangeRingKeyword _and and
151 see "Instruction : I want window" + nl
160 see "Instruction : Window Title = " + cValue + nl
164 see "Using : and" + nl
172 Instruction : I want window
174 Instruction : Window Title = hello world
178 pair: 自然言語プログラミング; 演算子 ‘+’ の変更
183 “+”演算子などの演算子へ新しい動作を定義したいときがあります。
185 この変更は、 ChangeRingOperator 命令を使用することにより、演算子を隠せます (名前自体の変更)。
187 そして、演算子を識別子としたものを動作として扱うことができます。
193 ChangeRingOperator <変更前の演算子> <変更後の演算子>
195 .. note:: キーワードの復元をお忘れなく。
197 .. tip:: ChangeRingOperator 命令はコンパイラにより、字句解析段階で実行されます (構文解析の前に)。
203 ChangeRingOperator + _+
214 ChangeRingOperator _+ +
223 pair: 自然言語プログラミング; ‘=’ 演算子を ‘is’ へ変更するには
225 ‘=’ 演算子を ‘is’ へ変更するには
226 ====================================
232 ChangeRingKeyword and _and
233 ChangeRingOperator = is
237 I want window and the window title is "hello world"
240 ChangeRingOperator is =
244 # I want window 命令の属性
248 # ここで window 属性の再定義を行いません。
251 # 値を与えると、キーワードは無視されます。
254 ChangeRingKeyword _and and
269 see "Instruction : I want window" + nl
278 see "Instruction : Window Title = " + cValue + nl
283 pair: 自然言語プログラミング; Natural コードで Eval() を使うには
285 自然言語コードで Eval() を使うには
286 ==================================
294 cProgram = ' I want window and the window title is "hello world" '
298 Func MyLanguage cCode
300 # キーワードと演算子を変更する命令をコードへ追加します。
301 # 理由は Eval() はコンパイラの新しいオブジェクトとして使用されるからです (元のキーワードと演算子)。
304 ChangeRingKeyword and _and
305 ChangeRingOperator = is
316 # I want window 命令の属性
320 # ここで window 属性の再定義を行いません。
323 # 値を与えると、キーワードは無視されます。
326 ChangeRingKeyword and _and
328 ChangeRingKeyword _and and
343 see "Instruction : I want window" + nl
352 see "Instruction : Window Title = " + cValue + nl
357 pair: 自然言語プログラミング; BraceStart と BraceEnd メソッド
359 BraceStart と BraceEnd メソッド
360 ===============================
362 { } の使用前後で実行されるコードを記述できます。
394 pair: 自然言語プログラミング; BraceExprEval メソッド
397 ======================
399 この用例は、 “BraceExprEval”メソッドで自然言語コードの式を取得するための用法です。
413 if lkeyword lkeyword=false return ok
415 see "type: " + type(r) see nl
416 see "value : " see r see nl
431 pair: 自然言語プログラミング; 本物の自然言語コード
442 Accept 2 numbers then print the sum
448 Accept=0 numbers=0 then=0 print=0 the=0 sum=0
455 see "Enter Number ("+x+") :" give nNumber
460 for x in aNumbers nSum+= x next
461 see "The Sum : " + nSum
474 pair: 自然言語プログラミング; BraceError() メソッド
477 =====================
479 この用例は、 “BraceError” メソッドで括弧 { } を用いてオブジェクトへアクセスした時の
495 see "Handle Error!" + nl
496 SEE "Message :" + cCatchError + nl
497 if ( left(cCatchError,11) = "Error (R24)" ) and not isattribute(self,"test")
498 see "add attribute" + nl
499 addattribute(self,"test")
510 Message :Error (R24) : Using uninitialized variable : test
527 see "Handle Error!" + nl
528 see "Message :" + cCatchError + nl
537 Message :Error (R3) : Calling Function without definition !: test
545 pair: 自然言語プログラミング; 美しい自然言語コード
550 “literal”としてリテラルを入力する代わりに直接単語を受け入れることができます。
554 この用例では、“hello world”の代わりに hello world を受け入れます。
556 この用例では、命令の終了を確認するために braceend() を使用しています。
558 このクラスではリテラルで終了する自然言語命令のみ処理します。
562 ChangeRingKeyword and _and
566 I want window and the window title is hello world
571 # I want window 命令の属性
575 # ここで window 属性の再定義を行いません。
578 # 値を与えると、キーワードは無視されます。
583 ChangeRingKeyword _and and
598 see "Instruction : I want window" + nl
616 see "Instruction : Window Title = " + literal + nl
621 c= substr(cCatchError,":")
623 c= substr(cCatchError,":")
624 cCatchError=substr(cCatchError,c+1)
626 literal += substr(cCatchError,1)