2021-01-01から1年間の記事一覧
「このブログには他にどういう記事があるの?」という方向けの案内です。 がんばったもの memo88.hatenablog.com TechRacho さんの週刊Railsウォッチ(20210209後編)で紹介されました。 続き: Rubyで素朴な自作言語のコンパイラを作った さらに続き: 素朴な…
Qiita に書きました。 qiita.com
Qiita に書きました。 qiita.com
Qiita に書きました。 qiita.com
Qiita に書きました。 日本語プログラミング言語「なでしこ」 Advent Calendar 2021 の 13日目です。 qiita.com
Qiita に書きました。 qiita.com
Qiita に書きました。 日本語プログラミング言語「なでしこ」 Advent Calendar 2021 の 6日目です。 qiita.com
追加機能など main ブランチにはマージせずにブランチで個別に試しています。 真偽値リテラル true, false break while文の最後にジャンプ const 参照のみ可能(更新は不可)なローカル変数 if/else lexer で case 文に書き換えるだけの簡易実装 単項演算子 …
Qiita に書きました。 qiita.com
Qiita に書きました。 qiita.com
目次ページに戻る / 前 / 次 前回からの差分をまとめて見る case 文の構文を変更 変更前はこうでした。 case { (current_val == 0) { case { (count == 3) { set next_val = 1; } } } (0 == 0) { case { (count == 2) { set next_val = 1; } (count == 3) { …
目次ページに戻る / 前 / 次 前回からの差分をまとめて見る step 60 stmt_rest ではなく stmt を渡す トップレベルでのVMコメントの廃止 ==, != をそのまま使う Token#kind にリネーム step 61 二項演算子まわりの整理 vgcodegen.rb にリネーム 変数名・メソ…
目次ページに戻る / 前 / 次 前回からの差分をまとめて見る 真偽判定の変更(コード生成) while 文と case 文では 条件式の評価結果を 1 と比較して真偽を判定していました。 疑似コードで書くとこう。 # 修正前 if 条件式の評価結果 == 1 真と判定 => whil…
Qiita に書きました。 qiita.com
前回「Haskellでかんたんな自作言語のコンパイラを書いた」というのを書きました。これはこれで気が済んだので Haskell の話は切り上げて次に行ってもいいのですが、せっかく読み書きに慣れてきたところですし、もう少し何かやってみようかなと。 ※ Haskell …
移植一覧に戻る OCaml 版を書いた勢いで Haskell にもババッと移植しました。いつもの通りでライフゲームのコンパイルだけ通ればヨシ、という程度の非常に雑なものです。 github.com 移植元 memo88.hatenablog.com github.com ライフゲームのプログラムだけ…
かんたんな自作言語のコンパイラをいろんな言語で書いてみるシリーズ 18番目の言語は OCaml です。 いつもの通りでライフゲームのコンパイルだけ通ればヨシ、という程度の雑なものです。 できたもの github.com 主な部分のサイズ(行数)はこんな感じ。 $ wc…
Qiita の方に書きました。 qiita.com
vm2gol-v2 移植一覧に戻る Qiita の方に書きました。 qiita.com
Qiita に書きました。 qiita.com
目次ページに戻る / 前 / 次 前回からの差分をまとめて見る 今回はブレークポイントを指定できるようにしたのと、後はリファクタリングです。 _debug でブレークポイントを指定 これまで、プログラムの特定の箇所の動作を観察してデバッグしたい場合次のよう…
vm2gol-v2 移植一覧に戻る Qiita に書きました。 qiita.com
Zenn に書きました。 zenn.dev
Reline を使うと複数行編集ができるようなので、自分が使いそうな基本的な部分について調べてみました。 このリッチなのが標準で使えるの嬉しいですよね。ありがたや……。 RUBY_VERSION #=> 3.0.0 Reline::VERSION #=> 0.2.5 最初の雛形 ブロックは必須。 req…
Zenn に書きました。 zenn.dev
目次ページに戻る / 前 / 次 前回からの差分をまとめて見る 二項演算が右結合になっていたのを左結合に変えます。 例として 1 + 2 + 3 で見てみます。 変更前は [:+, 1, [:+, 2, 3]] となるようにパースされていて、最終的に機械語になって実行されるときに…
かんたんな自作言語のコンパイラをいろんな言語で書いてみるシリーズ 15番目の言語は Rust です。 理解は後回しにしてとにかく動くものを作るぞ、という方向性で書いたもの。 できたもの github.com 移植元 memo88.hatenablog.com ベースになっているバージ…
Zenn に移動しました。 zenn.dev
Qiita に書きました。 qiita.com
目次ページに戻る / 前 / 次 前回からの差分をまとめて見る VRAM の読み書きは、配列アクセスのような見た目で書けるようにしていました。 set vram[0] = 1; set vram_value = vram[0]; これをどうコンパイルしていたか。 レキサでは vram[0] をまるごと1つ…