2008年02月02日
川俣晶の縁側ソフトウェアその他開発日誌 total 4630 count

GAME Sharp:GAME言語のC#による実験的実装 Version 0.1

Written By: 川俣 晶連絡先

 昔懐かしいGAME言語のインタプリタをC#で実験的に実装しました。

 詳細は後述の添付ドキュメントにて。

GAME Sharp

配布先 §

感想 §

 なぜ今頃GAMEインタプリタを実装したのか、その理由はまだ内緒。PCホビイズム絡みの話ではあります。

 ちなみに、GAMEはシンプルで単純な言語と思っていましたが、それは大きな勘違いでした。言語仕様的に解釈の難しい部分がいろいろあります。特にuntilとnextの構文上の区別という問題は悩ましさ炸裂でした。一瞬で終わると思っていたコーディングがすぐ終わらなかったのは、そのあたりの問題もあります。

添付ドキュメント §

GAME Sharp:GAME言語のC#による実験的実装

                                                          Version 0.01

                                                        2008年02月02日

                                                      株式会社ピーデー

                                                              川俣 晶

●これは何か?

 1980年前後に月刊ASCII誌上でインタプリタ、コンパイラや応用プログラム等が発表されていたGAME(General Algorithmic Micro Expressions)言語のインタプリタをC#を用いて実験的に実装したものです。

 具体的にはGAME86言語仕様( http://www.nk.rim.or.jp/~jun/game86/ )を、一部変更の上でフル実装しています。

 なお、単純にインタプリタを実装してみることだけが目的であったため、実行速度や開発環境としての使い勝手、必要な入出力などは重視されていません。

●実行に必要なもの

 .NET Framework 3.5およびそれを実行できる環境

●ソースコードのビルドに必要なもの

 Visual Studio 2008 Professional (Professional以外でもビルド可能と思われますが未確認)

●インストールと実行

 GameSharpGUI.exeとGameSharpInter.DLLを任意のディレクトリにコピーした上で、GameSharpGUI.exeを開いてください。

●アンインストール

 GameSharpGUI.exeとGameSharpInter.DLLを削除し、(システムドライブ)\Users\(ユーザー名)\AppData\Roaming\Pie Dey Co.,Ltd\GameSharpGUI\ディレクトリを削除してください。(ディレクトリはVistaの場合)

●付属サンプルソースの実行

 SamplesCodes2.txtから適当なプログラムをCOPYし、GameSharpGUIのSource領域に貼り付け、Runボタンをクリックしてください。行番号が付いている行の範囲が1つのプログラムです。

●使い方

 Sourceにプログラムを書き込みRunボタンを押します。出力結果はResultに表示されます。

 NewボタンはSourceをクリアします。LoadとSaveボタンはSoureのロードとセーブを行います。

●ソースコードの形式について

 load/saveされるソースコードは、全てUTF-8エンコードのテキストファイルとなります。

 デフォルトの拡張子は.gmです。

 既存のGAME言語用ソースファイルは、エンコードが一致しないためコード変換しないと読み込めないと思われます。ただし、US-ASCIIコードの範疇に含まれる文字のみ使用している場合は読み込めます。

● GAME Sharpの制限事項

 行番号は#=や!=の飛び先を示すラベルという以上の意味はありません。しかし、手動で昇順にソートされた番号を書き込む必要があります。

● 言語仕様

 基本的に、GAME86言語仕様をフル実装していますので、GAME86言語仕様( http://www.nk.rim.or.jp/~jun/game86/ )をご参照下さい。

 ただし、GAME86言語仕様では明確ではない部分、誤りと思われる部分、実装の都合上変更を要する点、その他については以下のような変更を行っています。

・飛び先行番号

 #=などが指し示す行番号は存在しなくても良い。存在しない場合は、指定番号よりも大きな範囲で最も近い番号が指定されたものと見なされる

・@=の定義

 "("の有無は構文上の区別にならないだけでなく、GAME86のサンプルソースではNEXTを"("ありで書いている例があり、そのままでは上手く扱えない。そのため、「untilとnextの構文上の区別はない。@=式 しかない」と変更。両者は、for/doスタックのトップのタイプによって分類される。

 forの場合は式の値を指定メモリに書き込んで、その値がループ終値以上であればループ終了

 doの場合は式の値が1ならループ終了

・項と式の変更

<式> ::= <項> | <項> <二項演算子> <項>

 ↓

<式> ::= <項> | <項> <二項演算子> <式>

<変数>=<項>       変数への代入

#=<項>            <項>の値の行番号の文にジャンプ(GOTO)

!=<項>            <項>の値の行番号のサブルーチンへジャンプ(GOSUB)

?=<項>            <項>の結果を数値出力 左詰め

??=<項>           <項>の結果を数値出力 16進4桁

?$=<項>           <項>の結果の下位1バイトを数値出力 16進2桁

?(n)=<項>         <項>の値の数値出力 n桁で右詰め

$=<項>            <項>の値の下位バイトを文字コードとする1文字を出力

.=<項>            <項>の値の下位バイトの数だけ空白を出力

'=<項>            <項>の値で乱数シードを設定

 以上の<項>は全て<式>に変更。(特に「代入」は変更しないと実行できないサンプルソースがある)

・データスペース

通常変数と配列としてアクセスできる領域をデータスペースとして確保

32Kバイトのデータスペースを持つ

この空間は配列としてアクセスできる

最初の26×2バイトは変数A~Zに該当

A(式)アクセスの場合、A+式の添え字の2バイトを使う

A:式)アクセスの場合、A+式*2の添え字の1バイトを使う

・入力の?と$

 文ではなく擬似変数に変更

・剰余

 %は後ろに項を伴い、最後に行われた割り算の余りを得る演算子とする。

 %(A/B)のように使用し、A=3, B=2のとき、結果として1という値を得る。

● 配布規則

 本ソフトの著作権は株式会社ピーデーが持ちます。

 本ソフトを使用して発生したいかなる結果に対しても、弊社は責任を負いません。

 非営利目的での本ソフトの使用、修正、再配布等は全て無償にて許可します。特に弊社の許可を得ることなく自由に使用してください。

 営利目的での利用は、弊社までお問い合わせ下さい。

● 変更履歴

2008年02月02日 Ver 0.01

・最初のバージョン

● 問い合わせ先

株式会社ピーデー http://www.piedey.co.jp/

川俣 晶 autumn@piedey.co.jp

※ 本ソフトに関する情報は以下にあるかもしれません

▲→川俣晶の縁側→ソフトウェア→その他開発日誌 http://mag.autumn.org/default.modf?s=other

以上