【謎】MysticSLを使ってみる【言語】

投稿日 : 2008年6月1日 15:17

某掲示板のスレタイ風味自重。
さて今回も命令のピックアップをやっていきます。
(ところでこの記事って何人の方に見てもらってるんだろう…
 記事までマイナーな予感だけどそれが鶏唐揚クオリティ)


さて、前々回で変数の型は3つしかねぇ!って言いましたが、
実はBinaryXXXX系の命令でバイト配列が扱えます。
ただ取得も格納も命令で行うので普通の変数のような扱い方は
できません。中身を画面に表示するだけでも大変ですw

Integer [BinData, forI]
BinaryAlloc [1, 10]
StringToBinary [1, "ABCDE"]
For [forI, 0, 9, 1]
    BinaryGet [1, BinData, forI]
    Print [BinData + "\n"]
Next
Stop

実行結果

で。コードと実行結果でもうお分かりかと思います。

文字列がUnicode扱い

そこまでVB6に似せなくても…というか文字列そのまま投げてるのか。
なおFor文の引数はBASICと同じ並びとなってます。
BASICで書くと以下。

For forI = 0 To 9 Step 1

文字列はUnicode扱いですが、
ファイルに出力するとShift-JISになるのも

VB6風味


さてお次は命令ではないのですが、システム変数やらエスケープ文字やら、
言語仕様に近い部分を見ていきます(なんか順番が逆な気がするけど鶏唐揚クオリティだから仕方ないw)

エスケープ文字は以下のとおり(リファレンスから引用)

記号 対応文字
\r キャリッジリターン
\l ラインフィード
\n 改行("\r\l"と同等)
\c ,(コンマ)(Ver1.70からは使用しなくても動作します。)
\q "(ダブルクォーテーション)
\t タブ文字
\0 ヌル文字
\\ \(円文字)

カンマがエスケープ文字じゃないとだめって言うのはクレーム来たんだろうなぁ…
1.70から修正改良されています(失礼

タブ文字かんのか?と思って試したところ、
実行時に半角スペース1個に変換されてました。

中間コードの仕様のせいかね…
あと改行が特殊。普通は\r\nですがMysticSLでは\r\l。で、それと同等なのが\n。
「Windowsの改行」という意味で1つの役割を与えたんでしょうかね。

こうしてみるとこの言語は1役割1要素が多いような印象です。
1要素で組み合わせによって役割が変わる等、初心者が混乱しやすい部分を排除したんでしょうか。

そのおかげで中級者以上は確実にウザいと感じるでしょう(失礼


お次はシステム変数とやらですが、
これはMSLという名前空間(という表現が適切かは不明)に所属しているようです。

打ってみるとコード補完キタ───(゚∀゚)───!!

teまで打ったら前方一致してるものが選択されてます。思わぬところで便利設計。
これはGUIのとき楽しみだなぁうふふふ(変態

MSLに属しているものを列挙してみます(リファレンスから引用)
変数

変数 説明
hWnd スクリプトウィンドウのハンドル
hDC スクリプトウィンドウのデバイスコンテキストハンドル
Path スクリプトのパス
TextX 次に文字が表示されるX座標
TextY 次に文字が表示されるY座標
ScreenX デスクトップ解像度の幅
ScreenY デスクトップ解像度の高さ
TargetWin 現在選択されているウィンドウのID
EventWin 最後にイベントが発生したウィンドウのID
CmdLine コマンドライン文字列
デバッグ時はオプションで設定されたコマンドラインが渡されます。
Me 自アプリケーションの実行状況
デバッグ時は常にFalseが渡されます。
DebugMode デバッグ実行時は常にTrueが渡されます。
MSLVersion MysticSL本体のバージョンが返ります。

定数
定数 説明
True 1
False 0
Null ヌル値
NullC ヌル文字(文字コード0)
NullS ヌル文字列(長さ0の文字列)
PI 円周率

これらはMSL.を省略してもいけるようで。
画面解像度の取得や、Printで次に書き出される座標も取得できるようですが
やはり使い道があまり思いつかないのは私の脳が貧相なせいでしょう。
「最後にイベントが発生したウィンドウのID」とかはおそらくGUIに関することでしょう。
複数ウィンドウをIDで管理しているようです。


かっ飛ばしていきます。次はプリプロセッサディレクティブ(のようなもの)です。
これはVBではなくC風味ですね。

#と打ったらいきなりコード補完キタ───(゚∀゚)───!!

これも前方一致選択してくれます。
ディレクティブを補完してくれるのは初めて見ました。
ただこの中で#subrogateってのが謎だったのでリファレンス見てみました。

代替命令を使用します


(´・ω・`)??


他言語に慣れているユーザが慣れた命令に置き換えたい場合や
MSL命令の習得が困難で、簡単な命令に置き換えたい場合に使用します

Printを「プリント」とか「出力」に置き換えられるということかっ!

正直いらない

リファレンス自身にも「非推奨」と書いてありましたから、完全にネタでしょうw
やはり只者ではないなお主…


あぁ解説記事書くのって大変だ。疲れるw
このあたりで息抜きとしてちょろっと作ってみたものを置いときます。


Integer [forI]
String [Result]

Result = ""

For [forI, 1, 100, 1]
    If [forI % 3 == 0 && forI % 5 == 0]
        Result = Result + "FizzBuzz\n"
    ElseIf [forI % 3 == 0]
        Result = Result + "Fizz\n"
    ElseIf [forI % 5 == 0]
        Result = Result + "Buzz\n"
    Else
        Result = Result + forI + "\n"
    End If
Next
Print [Result]

//画面に表示しきれないのでクリップボードへw
ClearClipboard
SetClipText [Result]

Stop

有名なFizzBuzz問題ですね。

あ、演算子の説明してねぇや(ぉぃ
演算子も基本的にC風味です(リファレンスから引用)
算術・論理演算子

優先度 演算子
1 ^(べき乗)
2 *(乗算) /(除算) %(余り) \(整数除算)
3 +(加算) -(減算)
4 &(論理積) |(論理和) !(排他的論理和)

比較演算

優先度 演算子
1 ==(等しい) !=(等しくない) <(小さい) >(大きい) <=(以下) >=(以上)
2 &&(双方ともTrueであるとき)
3 ||(どちらか一方でもTrueであるとき)

「等しくない」演算子、BASICのように<>とも書けます。


とりあえず今回はここまでにします。
説明ばっかだなぁ…見てておもしろいんかなぁ。
記事を書くことの難しさを実感orz

フィードバック

# re: 【謎】MysticSLを使ってみる【言語】

2008/06/01 15:43 by ネタ好き未記入
>記事を書くことの難しさを実感orz
おお鳥仲間よ、その気持ち良く分かりますw
私なんか趣味で【機械語】ネタを公開しているけども、一体何人が見ていることやら(笑)
今時機械語に興味ある人は居るのかな?

Unicode扱いしておいてShift-JISとか、妙なプリプロセッサディレクティブとか、このコンパイラの作者はかなりのつわものですね。コード補完とか、さり気なく便利機能を導入し、さり気なく不思議な仕様を混ぜるそのセンス凄い!
自作コンパイラを作る際には、多いに参考にしようと思います。

# soiBuRsEWeVKEjWip

2011/12/13 18:27 by http://www.d4women.net/alesse.php
Not bad post, leave it at my bookmarks!...
コメントの入力
タイトル
名前
Url
コメント