忍者ブログ

どっかのゆとりのチラシの裏

plasma_effectのメモ帳的ブログのようなsomething

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

.NETのILを触ってみた

.NET Frameworkの実行ファイルは拡張子がexeであるが、コマンドプロンプトのildasmコマンドで拡張子ilのアセンブリファイルが生成される。これをILと言うっぽいのだが、Dt言語に向けてちょっと触ってみたわけだ。作ってみたコードを紹介するが、その前にまずDt言語のコンパイルについて今思い浮かんでいる流れをここに書いておく。
すなわち「Dt言語のコードをコンパイラに渡す→コードをパース、ILコード生成→ILコードをアセンブル」の流れだ。
分割コンパイルはどうすんだとかプリプロセッサはどうしたとかの声は聞こえないふりをしておく。そんなものプロトタイプが完成してから考えればいい。
で、今回書いたコードがこれだ。

01:.assembly test{}
02:
03:.method public static int32 test_mul(int32,int32) cil managed
04:{
05:    .locals init (int32 V_0,int32 V_1)
06:    ldarg.0
07:    ldarg.1
08:    mul
09:    ret
10:}
11:
12:.method public static void Main(string[] args)cil managed
13:{
14:    .entrypoint
15:    ldstr "一つ目を入力"
16:    call void [mscorlib] System.Console::WriteLine(string)
17:    call string [mscorlib] System.Console::ReadLine()
18:    call int32 [mscorlib] System.Int32::Parse(string)
19:    ldstr "二つ目を入力"
20:    call void [mscorlib] System.Console::WriteLine(string)
21:    call string [mscorlib] System.Console::ReadLine()
22:    call int32 [mscorlib] System.Int32::Parse(string)
23:    call int32 test_mul(int32,int32)
24:    call void [mscorlib] System.Console::WriteLine(int32)
25:    ret
26:}

解説しようと思ったが自分でもよくわかってないのでやめた。
PR

Dt言語作りたい

こんな感じのDt言語作りたい

//FizzBuzz例
define func fizzbuzzprint(num : int):void
{
    define value f3 : bool construct(num % 3);
    define value f5 : bool construct(num % 5);
    if(f3 && f5)
        print("fizzbuzz");
    else if(f3 && !f5)
        print("fizz");
    else if(!f3 && f5)
        print("buzz");
    else
        print(num);
}

entrypoint
{
    for(define value i : int construct(1) ; i<30 ; ++i)
        call fizzbuzzprint(i);
}

つまり
・entrypointがint main()のかわり
・変数宣言の仕方が
define value name : type construct(args)
・関数宣言の仕方が
define func name : return_type
{
/* hogehoge */
}
・返り値voidの関数及び返り値はあるがその値を活用しない場合の呼び方
call func();
・if文for文搭載、whileは知らん

色々頭のなかで構想練ってるけど問題は.NETのバイトコード全く読めないことなんだよなぁ

カレンダー

06 2017/07 08
S M T W T F S
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

フリーエリア

最新CM

[02/12 kariya_mitsuru]
[10/14 どっかの京大生o]
[10/04 どっかのZ会生y]
[07/31 どっかのZ会生y]
[07/31 GNR]

プロフィール

HN:
plasma_effect
性別:
非公開

バーコード

ブログ内検索

最古記事

(06/08)
(06/18)
(06/21)

P R