vm2gol-v2

vm2gol v2 (58) _debug でブレークポイントを指定できるようにした

目次ページに戻る / 前 前回からの差分をまとめて見る 今回はブレークポイントを指定できるようにしたのと、後はリファクタリングです。 _debug でブレークポイントを指定 これまで、プログラムの特定の箇所の動作を観察してデバッグしたい場合次のような手…

vm2gol v2 (57) 二項演算を左結合に変更

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る 二項演算が右結合になっていたのを左結合に変えます。 例として 1 + 2 + 3 で見てみます。 変更前は [:+, 1, [:+, 2, 3]] となるようにパースされていて、最終的に機械語になって実行されるときに…

vm2gol v2 (56) VRAMの読み書きを組み込み関数化

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る VRAM の読み書きは、配列アクセスのような見た目で書けるようにしていました。 set vram[0] = 1; set vram_value = vram[0]; これをどうコンパイルしていたか。 レキサでは vram[0] をまるごと1つ…

vm2gol v2 (55) VM命令 set_reg_a, set_reg_b の廃止など

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る VM命令 set_reg_a, set_reg_b の廃止 cp 命令で書き換えられるため不要になっています。 「set_reg_a, set_reg_b を使って書いた方が意図も明確で可読性も高い」みたいなメリットも大してないので…

vm2gol v2 (54) コード生成器の冗長すぎる部分を整理

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る 気にはなっていたけど後回しにしていたアレです。 今 v3 を作っているのですが、たしか 関数呼び出しの引数や return文で任意の式を書きたくなったとかで いじっていて、コード生成器の冗長すぎる…

vm2gol v2 (53) 間接メモリ参照のフォーマットの改良 / alinesへの蓄積をやめる

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る 間接メモリ参照のフォーマットの改良 機械語での間接メモリ参照はこれまでアセンブリでとまったく同じ [bp-2], [bp+3] のようなフォーマットにしていて、 VM では /^\[bp-(\d+)\]$/ のような正規表…

vm2gol v2 (52) リファクタリング: 字句解析処理を別ファイルに分離

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る vgparser.rb で行っていた字句解析処理を vglexer.rb に分離します。 そうしなければいけない強い理由はあまりなくて、その方が他言語への移植がスムーズだった経験から、Ruby版にもフィードバック…

素朴な自作言語のコンパイラをKotlinに移植した

移植一覧に戻る やっつけなので汚いです。ライフゲームのコンパイルが通ったのでヨシ、というレベルのものです。 github.com 移植元 memo88.hatenablog.com ベースになっているバージョン: tag:51 のあたり メモ Java版 からコピーしてきて修正してできあが…

vm2gol v2 (51) 機械語コードのフォーマットを固定長風に変更

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る これまで機械語コードのフォーマットはこのような YAML ファイルにしていました。 (以下便宜的に「可変長風」と呼びます) --- - call - 1029 - exit - label - vram_set - push - bp ... これを…

素朴な自作言語のコンパイラをZigに移植した

移植一覧に戻る やっつけなので汚いです。ライフゲームのコンパイルが通ったのでヨシ、というレベルのものです。 Zig言語(ziglang)を触り始めて1週間くらいの人が雑に書いたものですので、「お手本にできそうな Zig のコード」「かっこいい Zig のコード」…

素朴な自作言語のコンパイラをLibreOffice Basicに移植した

移植一覧に戻る Qiita の方に書きました。 qiita.com

素朴な自作言語のコンパイラをPHPに移植した

移植一覧に戻る やっつけなので汚いです。ライフゲームのコンパイルが通ったのでヨシ、というレベルのものです。 github.com 移植元 memo88.hatenablog.com ベースになっているバージョン: tag:50 のあたり ただ、実質的には Perl版 からの移植です。 メモ P…

vm2gol v2 (50) コード生成処理の変更にあわせたパーサの修正など

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る 変数宣言周りの修正(パーサ編) 第48回 変数宣言のコード生成処理の改善など で変数宣言まわりを変更したときは特に考えてなかったんですが、これはパーサも合わせておいた方が良さそうに思えます…

素朴な自作言語のコンパイラをC♭に移植した

移植まとめに戻る やっつけなので汚いです。ライフゲームのコンパイルが通ったのでヨシ、というレベルのものです。 github.com C♭は書籍 『ふつうのコンパイラをつくろう』の題材として作られた、C によく似た言語です。コンパイラ cbc は Java製。 移植元 m…

素朴な自作言語のコンパイラをPerlに移植した

移植まとめに戻る 20年ぶりくらいに Perl のコードを書きました。 やっつけなので汚いです。ライフゲームのコンパイルが通ったのでヨシ、というレベルのものです。 github.com 移植元 memo88.hatenablog.com ベースになっているバージョン: tag:49 のあたり …

素朴な自作言語のコンパイラをCに移植した

移植一覧に戻る 20年ぶりくらいにC言語のコードを書きました。 かなり忘れてます。 やっつけなので汚いです。ライフゲームのコンパイルが通ったのでヨシ、というレベルのものです。 github.com 移植元 memo88.hatenablog.com ベースになっているバージョン: …

vm2gol v2 (49) codegen_case を移植しやすいように変更

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る まずはしょぼいミスを修正……。 --- a/vgparser.rb +++ b/vgparser.rb @@ -478,7 +478,7 @@ if $PROGRAM_NAME == __FILE__ begin tree = parser.parse() - rescue ParseError => e + rescue Parser:…

vm2gol v2 (48) 変数宣言のコード生成処理の改善など

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る Java版 を書いているときに codegen_stmts() の微妙なところに気付いてしまいました。 def codegen_stmts(fn_arg_names, lvar_names, stmts) alines = [] stmts.each do |stmt| stmt_head, *stmt_r…

vm2gol-v2 移植まとめ

要件をゆるゆるにしてハードルを下げまくった初心者・入門者(=自分)向けの簡単・素朴で割といいかげんな自作言語のコンパイラ(+α) vm2gol-v2 の移植です。 移植元の Ruby版のコンパイラ部分だけだと 1000行くらい、という素朴さ。 ノリとしては zick …

素朴な自作言語のコンパイラをJavaに移植した

移植一覧に戻る Java で書いてみました。やっつけなので汚いです。ライフゲームが動いたのでヨシ、というレベルのものです。 github.com 移植元 memo88.hatenablog.com ベースになっているバージョン: tag:47 のあたり メモ アセンブラ・VM は移植対象から外…

素朴な自作言語のコンパイラをDartに移植した

移植一覧に戻る Dart で書いてみました。やっつけなので汚いです。Dart よく知らないけどライフゲームが動いたのでヨシ、というレベルのものです。 github.com 移植元 memo88.hatenablog.com ベースになっているバージョン: tag:46 のあたり 追記 2021-03-21…

素朴な自作言語のコンパイラをPythonに移植した

移植一覧に戻る Qiita に引っ越しました。 qiita.com

vm2gol v2 (45) リファクタリング(主にVM)

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る 今回は(主に VM の)リファクタリングです。 テストが用意できたので、安心してサクサクと進められます。 Rubocop 関連 Rubocop の設定が古くなってると言われたので設定を修正して、新たに指摘さ…

vm2gol v2 (44) テストの追加

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る 残りのテストをまとめて追加しました。 アセンブラ・コード生成器・パーサについては ひとまずライフゲームのコードを与えて出力が一致するか検証するようにしました。 これで、パース〜アセンブル…

素朴な自作言語のコンパイラをTypeScript(Deno)に移植した

移植一覧に戻る TypeScript 入門というか、とりあえず何か書いて慣れようと思って書いてみました。やっつけなので汚いです。TypeScript まだよく分からないけどなんか動いたのでヨシ、というレベルのものです。 github.com 移植元 memo88.hatenablog.com ベ…

vm2gol v2 (43) フォーマットなどいろいろ修正

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る 前回 test ディレクトリを作ったので test_vgparser.rb をそちらに移動 各ステップで使っていたソースファイルを steps ディレクトリに移動 最初から細かくディレクトリを分けるのはあまり好みでは…

vm2gol v2 (42) ライフゲームのテスト

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る これまでずっと、テスト書かなきゃなーとは思っていたのですが、書かないままズルズルとここまで来てしまいました。 いいかげん書かないと。 これまで(第38〜40回あたり)はライフゲームを実行し…

Rubyで素朴な自作言語のコンパイラを作った

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る RubyでオレオレVMとアセンブラとコード生成器を2週間で作ってライフゲームを動かした話 の続きです。 このときスコープ外にしていたフロントエンド部分(高水準言語から構文木への変換部分)をやっ…

vm2gol v2 製作メモ(40) 落ち穂拾い: ローカル変数宣言時に初期値をセット

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る これは簡単なのでサラッとやります。 (18) ローカル変数の宣言と代入 / var, set文 のときにちょっと触れていた件です。 だいぶ枝葉な話ですね。 ["var", "x"] , ["set", "x", 12] このように2つ…

vm2gol v2 製作メモ(39) 落ち穂拾い: 入れ子の式を書けるようにする

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る 第24回 入れ子の式 で泣く泣く見送ったアレをやっつけます! 枝葉の修正(1) ステップ実行の切り替え 先に枝葉っぽい部分を片付けます。 前回 ダンプ表示を間引きしてライフゲームの実行を高速化…