戻る

ぼくのかんがえたあたらしいげんご
プログラミング言語 Misa



 1.Misa とは
 2.ダウンロード
 3.インストール方法
 4.プログラム例
 5.コマンドラインオプション
 6.Misa の命令セット
 7.文法
 8.配布している misa.exe の仕様
 9.ライセンス
10.連絡先
11.謝辞


Misa とは

Misa は、みさくら語で書けるプログラミング言語です。
ステキ漫画家みさくらなんこつ先生のセリフ回しにできるだけ近い表現で、プログラムを記述することを目指して作られました。



ダウンロード

Windows用実行ファイル(DOSプロンプトで動作します)
Misa version 1.01(30KB)

ソースコード
Misa version 1.01 src(13KB)



インストール方法

インストーラーなどは付属していません。
ダウンロードしたバイナリファイルを解凍後、好きな場所に置いてください。
コンソールプログラムですので、パスの通った場所(例えば C:\Window\)へ置くと便利かも知れません。
アンインストールは、ファイルを削除するだけです。



プログラム例

Misa を使うと、次のサンプルプログラムのような、ちょっぴり変わったステキなプログラムを記述することができます。


サンプルプログラム
hello.misa
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#! /usr/bin/misa

ごっ、ごぉおっ、ご〜きげんよおぉおおぉおほっ。ほおぉおぉおっ。

「ごきげん☆みゃぁああ”あ”ぁ”ぁああ〜っ」

さわやかな朝の☆ご挨拶! お挨拶がっ。
澄みきった青空にこだましちゃうぉ〜ああぉおおおぉん。

「は、はひっ、はろおぉっ☆わぁるどおおぉっぉ〜っ」

こ、この文章は☆おサンプル! おおぉおぉおおサンプルプログラム!!
どんなおプログラム言語でも基本のご挨拶させていただくのぉぉおッ!

「ぽうっ」

長々と書くのがこ、ここでの〜、ここでのぉおおぉおぉぉおたしなみぃぃいぃ。

「長いぃ。長すぎましゅう。ご挨拶にこんなプログラム長すぎまひゅぅうぅ☆
 んおおぉぉ、ばかになる、おばかになっちゃいましゅ〜ッ」

長いのがっ、バッファの奥まで入ってきましゅたぁあぁあっ!
ばっふぁ☆溢れちゃいまひゅぅ〜。あみゃぁあ”あ”ぁ”ぁああ”あ”ぁぁ。

「で、出ます☆ んおおぉぉおおっ、エラー出ちゃいまひゅっ」

ほひぃ☆! え、えらーっ、んお”お”ぉお”お”ぉおぉおおぉっっ。

「出た☆ 出た出た出た出たぁぁあっ えらあぴゅるーっって出たあぁっ」

はしたない☆! ぉおおぉはしたないっ! おはしたない言語ですっっっっっっっ!
おほっほおぉっっっほおぉっっっっっっっっっ!

「えらあらいしゅきぃぃぃいぃっっ」

止まらない すごい エラーみるく
こってりしたのがいっぱい出てるよぉぉぉおおぉぉおおぉぉおっっ。

「んほぉっ☆ っおぉぉぉおお国が分からなくなっちゃいまひゅう〜っ」

ま、まだ出るぅ☆ 出てるのおぉっ☆ エラーまだまだ出ましゅぅぅ!
ばんじゃ〜ぁぁあい、ばんじゃいぃぃ、ばんにゃんじゃぁんじゃあぁぁああぁい!

実行結果
>misa hello.misa
Hello World!

>



コマンドラインオプション

Misa は、以下の書式のコマンドラインで起動します。

 misa [option] [--] [filename]

以下のオプションが指定できます。
 
-b Brainf**k コードに変換して出力します
-c 文法チェックだけ行い、実行はしません
-e このオプションに続く1行プログラムを実行します
-h 使い方の説明を表示します
-m size 仮想メモリの初期サイズをキロバイト単位で指定します
デフォルトでは、初期サイズは 32KB になっています
-t 警告の表示を抑制します
-v バージョン情報を表示します
-w 警告対象のコードがあれば表示して停止します(デフォルト)
-x 非標準の拡張機能を使いません(仮想メモリが左側へ拡張されなくなります)
-z eof このオプションに続く数値でファイル終端(EOF)の値を指定します
デフォルトでは、EOFの値は -1 です
-- これ以降のオプション指定を無視します

ファイル名を指定せずに起動した場合は、標準入力からプログラムを読み込みます。


Misa の命令セット

Misa は文法上、Brainf**k というプログラミング言語の亜流言語です。
Brainf**k とは、みさくら語に直訳すれば おつむでち**しごき という意味ですが、Misa は Brainf**k のプログラムもそのまま実行することができます。

Misa では、1つの命令は1文字の記号または日本語文字で成り立ちます。
命令は全部で8種類です。
以下の命令表では1つの命令に複数の文字が割り当てられていますが、これはどの文字を使っても同じ命令になるということです。


[ 命令表 ]

命令文字 機能
> → 〜 ー ポインタを1進めます
< ← ★ ☆ ポインタを1戻します
+ あ ぁ お ぉ ポインタの指す値を1増やします
- っ ッ ポインタの指す値を1減らします
. ! ポインタの指す値を出力します
, ? 1文字入力を読み込んで、ポインタの指す値に設定します
[ 「 『 ループの開始を意味します。
ポインタの指す値が0ならループを終了して次へ進みます
] 」 』 ループの終了を意味します。
この位置まで来ると、対応するループの先頭へ戻ります



文法

(1)コメント

'#'(半角シャープ)から行末まではコメントとして無視されます。
また、命令文字とコメント記号以外の文字がプログラム中に書かれていても、それらはすべて単に無視されます(エラーにはなりません)。




(2)データメモリとポインタ

Misa は、内部に仮想のデータメモリとポインタを持っています。
プログラム実行開始時は、ポインタは(データメモリ上の)0番地を指していてデータメモリはすべて0で埋められています。

実例を見た方がイメージを掴みやすいと思います。
次のプログラムを実行させてみてください。0から9の数字を表示します。

サンプルプログラム
number.misa
1
2
3
4
# '0'〜'9'の数字を表示するプログラム

ああああああああ ああああああああ ああああああああ ああああああああ
ああああああああ ああああああああ! あ!あ!あ!あ!あ!あ!あ!あ!あ!

実行結果
>misa number.misa
0123456789

>



'あ' 命令はポインタの指す値を1増やす命令です。
2行目の真ん中までで 'あ' 命令を48回繰り返したので、ポインタの指す0番地のメモリの値は48になっています。
48は、文字コード(アスキーコード)では '0' を意味します。
 
次に出てくる '!' 命令はポインタの指すメモリの値を表示するもので、昔の BASIC 言語で言えば PRINT 命令に相当します。
メモリの値は現在48ですので、画面には '0' と表示されます。

'0' を表示した後、"あ!" が9つ並んでいるのが分かると思います。
'あ' と '!' で『1増やしてそれを表示』という意味になりますから、9回繰り返せば '1'、'2'、'3'……と数字を増やしながら順番に '9' まで表示されて実行結果の通りになります。




(3)ループ

'「' と '」' で囲んだ内側はループになります。
ポインタの指す値が0になるまで、カッコの内側のコードを繰り返します。

次の例題は、入力された文字をそのまま出力し続けるプログラムです。

サンプルプログラム
echo.misa
1
2
3
# 入力された文字をそのまま出力し続けるプログラム

あ「?!」

実行結果 (青い字は入力した文字です)
>misa -e "あ「?!」"
abc
abc
123456789
123456789
^C             ← 終了するために Ctrl + C を押した

>


上の例では、短いプログラムなので '-e' オプション(プログラムを直接指定するオプション)で起動しています。

最初の 'あ' 命令で、メモリの値を1にします。
次の '「' 命令はループの開始を表す命令で、現在のメモリの値が0なら対応するループ終了命令 '」' までジャンプします。現在のメモリの値は1なので、ジャンプせずに次に進みます。
'?' 命令は、入力を1文字受け付けてポインタの指すメモリに代入する命令です。BASIC 言語で言えば INPUT 命令に相当します。
例題では、'?' 命令で一文字取り込んで、'!' 命令でそのまま出力しています。
その次の '」' 命令はループの終了を表し、ループ開始位置までジャンプします。ここでループ先頭の '「' 命令に戻り、入力された値(=現在のメモリの値)が0でなければ、再びループの内容を繰り返します(キーボードから0の値は打ち込めないので、実質的には永久に繰り返すループになっています)。
最後に、終了するために Ctrl + C キーを押してプログラムを止めています。




以上が文法の基本です。
普通の条件分岐のような命令はありませんが、8つの命令の組み合わせで実現できるみたいです。
より高度な問題の解法については 以下の BrainF**k の解説サイトを参考にしてください。

The Brainfuck Programming Language (英語)
kMonos.NET - Brainf*ck (日本語)


配布している misa.exe の仕様

セル(任意のアドレスが指す1つのメモリ単位)の値範囲: -128〜127
メモリサイズ:無制限(デフォルトの動作では、マイナス方向にも拡張されます)
コードサイズ:無制限
文字コード:ShiftJIS(コンパイルしなおせば、日本語 EUC にも対応可能です)



ライセンス

このプログラムはフリーソフトウェアです。The MIT License に基づいて配布されます。

学術/商業利用を問わず、一切の代価を必要とせずに使用できます。
このプログラムの使用、改変、再配布、販売は、自由に行えます。
異なる二次ライセンスを適用することができます。
無保証です。著作権は放棄していません。


Copyright (C) 2005 Okayu Punch

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.



連絡先

ご意見やバグレポートなどは、以下の連絡先へお願いします。

okayuアットマークmbi.nifty.com(おかゆぱんち)



謝辞

サンプルプログラムを作成するにあたって、以下のサイトを参考にさせていただきました。
「みさくらなんこつのガイドライン」 まとめっぽいページ。
みさくらなんこつ先生の偉大さを教えてくれた、2ちゃんねる『みさくらなんこつのガイドライン』スレッドの方々に感謝します。

Misa 言語の元になっている Brainfuck 言語の製作者 Urban Muller 氏に感謝します。

そして Misa 言語の精神的支柱であり、インスピレーションの源泉であり、名前の一部を言語名に取らせていただいた、みさくらなんこつ先生に深く感謝します。