Udon VM 向けのコンパイラを作る[4]

もうちょっとで第一段階(中間言語の作成)が完了する 興に乗ったのでブラウザでコンパイルできるようにしようとしている
0

文脈のために前のまとめに入れたツイートから一部入れている

𝚌𝚊𝚗𝚗𝚘𝚛𝚒𝚗 @cannorin3

let returnAddr:SystemUInt32=0 label %func call Debug.Log "\"Hello, World!\n\"" goto_indirect returnAddr labelpub %_start let pub x : SystemBool = null goto_if x %next set returnAddr %next goto %func label %next exit という感じの中間言語を作っています

2019-12-24 02:14:41
𝚌𝚊𝚗𝚗𝚘𝚛𝚒𝚗 @cannorin3

UAssembly にアドレスとスタックの管理の自動化を入れただけのやつで,さらにこいつをターゲットとした高級言語を作る

2019-12-24 02:15:25
𝚌𝚊𝚗𝚗𝚘𝚛𝚒𝚗 @cannorin3

このへん最初にやっておかないと後々つらい

2019-12-24 02:17:35
𝚌𝚊𝚗𝚗𝚘𝚛𝚒𝚗 @cannorin3

型推論などは後から作る高級言語に入れるつもり

2019-12-24 02:18:37
𝚌𝚊𝚗𝚗𝚘𝚛𝚒𝚗 @cannorin3

(というか私は普段型検査器しか作らない人で,一応プログラム言語ですという言い訳のためにパーサとインタプリタだけ作ってきたところがある)

2019-12-24 02:22:21
𝚌𝚊𝚗𝚗𝚘𝚛𝚒𝚗 @cannorin3

ちなみにこいつの名前は Sanuki です (Stack と Address が抜けているので)

2019-12-24 13:56:27
𝚌𝚊𝚗𝚗𝚘𝚛𝚒𝚗 @cannorin3

中間言語をなぜ先に公開するかというと、人間でも可能な難易度で最低限プログラミングが可能な環境を最速で用意するためです 多分ブラウザで動く補完エディタ付きのコンパイラもつくります

2019-12-24 14:07:54
𝚌𝚊𝚗𝚗𝚘𝚛𝚒𝚗 @cannorin3

人間にはスタックとアドレスの管理は無理

2019-12-24 14:08:28
𝚌𝚊𝚗𝚗𝚘𝚛𝚒𝚗 @cannorin3

UAssembly のアセンブラのパーサは実装をサボっているみたいで、"\"" をエスケープされたダブルクォーテーションとして認識してくれない。漢字平仮名とかはまだ試してないけど出来ないかもしれない

2019-12-24 14:11:03
𝚌𝚊𝚗𝚗𝚘𝚛𝚒𝚗 @cannorin3

copy が間違えて pop になってた.ツイッターに上げると気づくな

2019-12-24 16:44:03
𝚌𝚊𝚗𝚗𝚘𝚛𝚒𝚗 @cannorin3

上から順に,ヒープの初期値,生成されたバイナリ,警告メッセージです pic.twitter.com/ICs0lk6VoY

2019-12-24 16:45:17
拡大
𝚌𝚊𝚗𝚗𝚘𝚛𝚒𝚗 @cannorin3

どうせエラーになるんだからラベルの下方参照の警告は要らんな

2019-12-24 16:46:10

ここからが新しいツイート 量が少ないのでまた数日分まとめる予定

𝚌𝚊𝚗𝚗𝚘𝚛𝚒𝚗 @cannorin3

これなんですが,できそうなのでブラウザでコンパイルできるようにします.補完も付くかも twitter.com/cannorin_vrc/s…

2019-12-26 02:01:31
𝚌𝚊𝚗𝚗𝚘𝚛𝚒𝚗 @cannorin3

パーサやコンパイラなどまとめて JavaScript にトランスパイルできるようにしたので、あとはいい感じのガワを作れば完成という様子です(昨日あまり進捗がなかったのはパーサを書くためのライブラリを書いていた)

2019-12-26 21:58:24
𝚌𝚊𝚗𝚗𝚘𝚛𝚒𝚗 @cannorin3

まぁいい感じのガワが難しいんですが

2019-12-26 21:59:56