マイペースなプログラミング日記

DTMやプログラミングにお熱なd-kamiがマイペースに書くブログ

何か新しい言語(?)作成中

アルファベット一文字に何か命令を持たせれば小文字だけでも26通りの命令が作れる!と考え新しい言語(?)を作るにいたった。とりあえずHello Worldソースコードjava上で動作する


auiiiiiiiaiiiiaiiiiiiiiiiiaiiiiiiiiiiiaiiiiiiiiiiiiiiauddddddddddddddddddddddddd
ddddddddauiiiiiiiiiiiiiiiiiiiiiiaiiiiiiiiiiiiiiaiiiiiiiiiiiiiiiiiaiiiiiiiiiiiaii
ipnipaiiiiiiiiiiiiiiiaiiiiiiiiiiiiiiiiiaiiiiiiiiaiiiiiiiiiiiiiaiiiiiiiiiiiiiiiii
iiaiiiiiiiiiiiaiiiiiiiiiiiiipaiiiiiiiiiaaiiiiiiiiiiiiiiiiiiiiiaauddddddddddddddd
ddddaiiiiiiiiaiiiiiiiiiiiiiiaudddddddddddddddddddauiiiiiiiiiiiiiiiaiiiiiiiiiiiii
iiiiaiiiiiiiiaiiiiiiiiiiiiiaiiiiiiiiiiiiiiiiiiiauiiiiiiiiiiiiiiiiiiaiiiiiiiiiiii
iiiiiiiaiiiiiiiiiiiiiiiiiaiiiiaaiiiiiiiiiiiipaiiiiiiiiiiiiiiaiiiiiiiiiiiiiiiiiii
iaiiiiiiiiiiiiiiiiiiipaiiiiiiiiiaaiiiiiiiiiiiiiiiiiiiiiaaudddddddddddddddddddaii
iiiiiiiiiaaiiiiiiiiiiiiiaiiiiiiaudddddddddddddddddddauiiiiiiiiiiiiiiiiiiaiiiiiii
iiiiiiiiiiiiiiiiiaiiiiiiiiiiiiiiiiiiaiiiiiiiiiiiiiiiiiiiaiiiiaiiiiiiiiiiiipgm

これでHello Worldが表示できる。実に長い。それで、それぞれの文字の意味は


a aを定義する(文字がすでに定義されてる場合は次に移る。数値は除去される)
n 0を定義する(文字列がすでにある場合は除去される)
i 値をインクリメントする
d 値をデクリメントする
c スタックから値を取り出しコンストラクタを呼び出す。インスタンスはスタックに入れる
m スタックから値を取り出しメソッドを呼び出す、返り値はスタックに入れる
s スタックから値を取り出しstaticなメソッドを呼び出す、返り値はスタックに入れる
f スタックから値を取り出しオブジェクトのフィールドを取得しスタックに入れる
g スタックから値を取り出しクラスのstaticなフィールドを取得し、スタックに入れる
p スタックにオブジェクトを積む(オブジェクトは現在の位置からは消える)
u 文字を大文字に変換する
l 文字を小文字に変換する
h ループカウンタスタックに値を入れる
r ループカウンタスタックから取り出した値ぶんだけループする
e ループの終了

Stackに文字列や数値を追加して、メソッドやフィールドを呼び出すときにスタックから必要な情報を得てリフレクションを使っている。メソッドを呼び出す場合は引数、引数の数、メソッド名、クラス名、staticでなければオブジェクト。フィールドの場合はフィールド名、クラス名、staticでなければオブジェクトの順でスタックに積む。コンストラクタは引数、引数の数、クラス名で。で、フィールドや返り値、生成したインスタンスはスタックに積む。現在ループ未実装。現在15文字しかつかってないので、あと11個の命令を追加できる。ソースはgithubにアップした。使い方は


java JSmallLetter ファイル名

http://github.com/d-kami/JSmallLetter/tree/master