グラフィック要素の管理など、プログラミングを教えるために何百もの言語が提案されています。 したがって、学習用の新しい言語の提案には、追加の正当化が必要です。
提案されているプログラミング言語(ワーキングタイトルPL / 2)とゲームプログラミング(ワーキングタイトルPL / 2スクリプト)の利点を説明し、アプローチの欠点を見つけることを提案します。
主なパラダイムは次のとおりです。
プロセッサを制御するアセンブラーコード
Prolog、SQLで表される論理プログラミング
関数型プログラミング
アルゴリズムで記述された命令型プログラミング
信号の送信と処理で構成されるオブジェクトプログラミング
現在、これらの手法は、既存のプログラミング言語の拡張機能に組み込まれています。 パラダイムを単一の構文に組み合わせて、異なるアプローチ間の競合を事前に解決するアプローチが提案されています。これにより、異なる構文の学習に費やされる時間を短縮できます。
それで、教育用プログラミング言語の重要な要素。
ソーステキスト
ソースファイルは任意のテキスト(コメント、アルゴリズムの説明)で構成され、PL / 2、sql、html、text、PL / 2スクリプトなど、さまざまなプログラミング言語の[名前付き]フラグメントを含めることができます。
コード挿入の始まりは、行の最初の位置のメタキーワードによって示されます
挿入の終わりは、行の最初の位置のシーケンス/メタによって示されます
PL / 2構文には、一定のインデント要件が含まれています。特に、プログラムテキストは、行の先頭から少なくとも4桁オフセットされています。
プログラムのテキスト構造
ネストのレベル間のシフトのサイズは4スペースです。 次の行の演算子の継続は、演算子のレベルに対して少なくとも3スペース分オフセットされます。
メインプログラムレベルは、ソースメタファイルのマークアップシンボルに対してそれぞれ4スペース分シフトされます。プログラムシンボルを4スペース未満インデントすることはできません
構文
さまざまなタイプのブロックでは、さまざまなタイプのブラケットが想定されます。
括弧(...)は、メソッドを呼び出すときにパラメーターを記述して渡すために使用されます
角括弧[...]は、配列の次元を記述し、配列要素にアクセスする際のインデックスを示すために使用されます。
中括弧{...}は、プログラム構造のさまざまな要素を示すために使用されます。 エラーをローカライズするために、中括弧に追加の文字が提供されます。
{-...-}-括弧の類似物-リレーショナルクラスの本体を記述するために使用されます
{#...#}-機能ブロックの本体の説明に使用
{$ ... $}-構造クラス定数を記述するときの外部フレームブラケット
{* ... *}-クラスまたはインターフェースの本体の説明
{&...&}-メソッド本体の説明
{@ ... @}-名前空間の本体
{| ... |}-並列ブロック
{%...%}-マネージドブロック
{= ... =}-責任のクラス
{...}-メソッドの本体の内部ブロック
オペレーター
== =/= := ++ -- + - * / -/- ( , .. IDE) (? boolean ? value_true :: value_false ?) -
命令型プログラミング
構造プログラミングの次の構文が提案されています。
括弧{&および&}で囲まれた演算子は、プログラムテキストで指定された順序で順番に実行されます
ループおよび分岐演算子は、実行順序を変更するために使用されます。
条件の履行
if (){ ... }
最初の条件が満たされた場合に実行をブロックし、そうでない場合にブロックされます
decision{ if (<1>) ... if (<2>) ... else ... }
定数または列挙のメンバーを示す数値スイッチ
switch (<>){ case <1>: ... case <2>: ... else ... }
式で三項選択演算子を使用することもできます。
ループ演算子
loop [explicit] [] { for <[] [ := ]>; from <>; while <, >; next < >; where < > ... continue; ... break [ ]; ... }
ここに:
loop-ループ開始ステートメント
明示的-ループは少なくとも1回実行され、最初のパスが実行される前にループを終了する条件をチェックします
for-ループ変数とその初期化のリスト
while-ループが反復を継続する条件
next-反復後に実行されるコマンド
from-サイクルを通過するときに要素が選択されるコンテナ
where-ループ本体の実行条件
continue-次の反復への早期移行の演算子
break-現在のサイクルまたは指定されたサイクルからの早期終了の演算子
エラー処理
オプトアウト取引と小包管理
transaction{ finalize { } catch { } { throw // catch finalize revoke // , finalize } }
オブジェクト指向プログラミング
new-新しいオブジェクトを作成します
drop-オブジェクトを削除します
コレクションを操作する
select :: = -名前付きコレクションオブジェクトに関する情報を取得します
挿入+ = -コレクションに新しいオブジェクトを含める
delete -= -コレクションからオブジェクトを削除します
更新-コレクション内の複数の更新
指定されたクラスまたはそのプロパティ/メソッドのオブジェクトに対するオブジェクトのアクションの権利の管理
grant + = -オブジェクトの許容権限をクラスまたはプロパティに割り当てます
deny + = -クラスまたはプロパティのオブジェクトに拒否権を割り当てます
取り消す-クラスのオブジェクト権限を削除します
クラスの種類
クラスは次のタイプに分類されます。
- ドメインクラス -ランタイム基本クラス
- 関係クラス -指定されたオブジェクト間の関係(Prologオファーと同様、関数パラメーターのリスト)、メソッドとプロパティはなく、開いているメンバーへのアクセスのみ。 機能により、リレーショナルデータベースから返されるセットに似ています
- 構造クラス -オープンな要素を持つ構造。 現在のオブジェクトの要素にアクセスするには、thisという単語を使用します。 処理のためのメソッドが含まれる場合があります。
- システムクラス -プライベートおよび保護された継承要素を含むことができるシステム。
- プロセスクラス -初期化値を渡し、結果の値を取得できるプロセス。 サービスに対応しています。 すべてのメソッドは、自身へのポインター( this )だけでなく、呼び出し元のクラスまたはオブジェクト( sender )へのポインターも受け取ります。 これにより、メソッドにアクセスするオブジェクトの権限を確認できます。 標準メソッドが含まれています。
命令型プログラミングではない
ラムダ式とリスト演算子
- :: = -式展開定義
- |> -右側の式で指定された、左側のコレクションのすべての要素のパイプライン
順序付きリストの実存的および普遍的な数量詞
- &> -右式を満たす左コレクションのすべての要素のコレクション
- !> -与えられた右式を満たさない左コレクションのすべての要素のパイプライン
- %> -右式に一致する左コレクションの最初の要素のコレクション(算術的には除算の残り)
- 〜> -リストのすべての要素(最初の要素を除く、正しい条件を満たす)
- $> -指定された右式に一致する最後の要素を除く、左リストのすべての要素のコレクション
- ?> -指定された右式に一致する左リストの最後のアイテムのコレクション
例えば
head :: = %> (\ true)、
尾:: = 〜> (\ true)
アセンブラー
プロセッサクラスが使用され、メソッドの引数はアセンブラコマンドの引数であり、プロパティはプロセッサコアのレジスタです。
このアプローチにより、継承を新しい世代のプロセッサへの移行として使用できるほか、短いニーモニックの代わりにコマンドのフルネームを使用したり、ヘルプシステムで同等の説明を使用したりできます。
ハロワールド
hallo.pl2 program default.Default.Main() meta source="pl2" name="example2" using user.OS.IO; // using OS Console interface program (String arguments[] \execution time command line parameters\ ) {& Console.write_line("Hallo, world!"); &} /meta *** hallo.pl2 ***
PL / 2スクリプト
PL / 2スクリプト言語は、スクリプトを記述し、ゲームをプログラミングするための変数を記述しながらクラスを拡張する機能を提供します。
関数変数の代わりに、等号で始まる行(Excelの場合)を使用することをお勧めします。
同時に、クラスとオブジェクトの記述はXMLに便利に保存され、コードはアクティブな処理に使用されます。
クラスの説明:
<?xml version="1.0" encoding="windows-1251"?> <pl2script> <type id="type.class.Scene" save="true"> <help id="class.Scene.help">pl2script/game/scene.htm</help> <system> <class id="class.Scene" domain="type" save="true"> <name> <ascii>Scene</ascii> <local></local> </name> <tip id="class.Scene.tip"> <ascii>Game class as a main class for a game</ascii> <local> </local> </tip> </class> <property id="class.Scene..." domain="string" save="true"> <name> <ascii>prop ...</ascii> <local>prop ...</local> </name> <tip id="class.Scene..tip"> <ascii>tip ...</ascii> <local> ...</local> </tip> </property> </system> </type> </pl2script>
オブジェクトの説明:
<?xml version="1.0" encoding="windows-1251"?> <pl2script> <scene id="game."> <name></name> <description> </description> <message> </message> <way id="game.universe" path="Universe/index" enabled="true"></way> <way id="game.solar" path="Solar/index" enabled="true"> </way> <way id="game.earth" path="Earth/index" enabled="true"></way> <way id="game.country" path="country/index" enabled="true"> </way> <way id="game.body" path="body/index" enabled="true"> </way> <way id="game.nature" path="nature/index" enabled="true"> </way> <way id="game.school" path="school/index" enabled="true"> </way> <way id="game.plant" path="plant/index" enabled="true"> </way> <way id="game.university" path="university/index" enabled="true"> </way> </scene> </pl2script>
この構文を使用する際に起こりうる問題について話してください。
参照:
habrahabr.ru/post/136272学校で勉強する際に最初にすべきプログラミング言語は何ですか?
habrahabr.ru/post/176243「National 」プログラミング言語
プロジェクト-github.com/palexisru/pl2_rus/wiki
INSTEADプロジェクトとLua言語へのリンクを提供してくれたoeaiに感謝