記事の案内

「このブログには他にどういう記事があるの?」という方向けの案内です。 がんばったもの memo88.hatenablog.com TechRacho さんの週刊Railsウォッチ(20210209後編)で紹介されました。 続き: Rubyで素朴な自作言語のコンパイラを作った さらに続き: 素朴な…

vm2gol v2 (62) case 文の構文を変更 / standardrb に変更

目次ページに戻る / 前 前回からの差分をまとめて見る case 文の構文を変更 変更前はこうでした。 case { (current_val == 0) { case { (count == 3) { set next_val = 1; } } } (0 == 0) { case { (count == 2) { set next_val = 1; } (count == 3) { set n…

vm2gol v2 (60) stmt をそのまま渡す / (61) リファクタリング

目次ページに戻る / 前 前回からの差分をまとめて見る step 60 stmt_rest ではなく stmt を渡す トップレベルでのVMコメントの廃止 ==, != をそのまま使う Token#kind にリネーム step 61 二項演算子まわりの整理 vgcodegen.rb にリネーム 変数名・メソッド…

vm2gol v2 (59) while, case の真偽判定の変更 / 予約語の判定の改良

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る 真偽判定の変更(コード生成) while 文と case 文では 条件式の評価結果を 1 と比較して真偽を判定していました。 疑似コードで書くとこう。 # 修正前 if 条件式の評価結果 == 1 真と判定 => whil…

(solved) Maven: CompilationFailureException: Compilation failure

Qiita に書きました。 qiita.com

Haskellごっこ: 変数の定義・参照

前回「Haskellでかんたんな自作言語のコンパイラを書いた」というのを書きました。これはこれで気が済んだので Haskell の話は切り上げて次に行ってもいいのですが、せっかく読み書きに慣れてきたところですし、もう少し何かやってみようかなと。 ※ Haskell …

Haskellでかんたんな自作言語のコンパイラを書いた

移植一覧に戻る OCaml 版を書いた勢いで Haskell にもババッと移植しました。いつもの通りでライフゲームのコンパイルだけ通ればヨシ、という程度の非常に雑なものです。 github.com 移植元 memo88.hatenablog.com github.com ライフゲームのプログラムだけ…

OCamlでかんたんな自作言語のコンパイラを書いた

移植一覧に戻る いつもの通りでライフゲームのコンパイルだけ通ればヨシ、という程度の雑なものです。 github.com 移植元 memo88.hatenablog.com github.com ライフゲームのプログラムだけコンパイルできればOKという簡単なコンパイラです。Ruby 版だとコン…

素朴な自作言語Pricのコンパイラをセルフホストした

Qiita の方に書きました。 qiita.com

Pascalでかんたんな自作言語のコンパイラを書いた

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

開発用のMySQL Dockerコンテナのメモリ消費が大きくて辛かったのでperformance_schemaを無効にしてどれくらい減るか調べたメモ

Qiita に書きました。 qiita.com

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

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

Juliaでかんたんな自作言語のコンパイラを書いた

vm2gol-v2 移植一覧に戻る Qiita に書きました。 qiita.com

Reline.readmultilineの練習: mysqlコマンドのラッパーを作ってちょっといい感じにしてみる

Zenn に書きました。 zenn.dev

Reline.readmultiline ちょっと調べたメモ

Reline を使うと複数行編集ができるようなので、自分が使いそうな基本的な部分について調べてみました。 このリッチなのが標準で使えるの嬉しいですよね。ありがたや……。 RUBY_VERSION #=> 3.0.0 Reline::VERSION #=> 0.2.5 最初の雛形 ブロックは必須。 req…

テストメソッドを1つだけ実行するのが面倒だったので minitest_runner.rb というスクリプトを書いてみた

Zenn に書きました。 zenn.dev

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

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

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

移植一覧に戻る やっつけなので汚いです。ライフゲームのコンパイルが通ったのでヨシ、というレベルの雑なものです。 github.com 移植元 memo88.hatenablog.com ベースになっているバージョン: tag:56 のあたり メモ 理解は後回しにして、かっこ悪い書き方で…

RuboCopの出力をルールでグループ化 + 違反件数の多い順にソート

Zenn に移動しました。 zenn.dev

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

Qiita に書きました。 qiita.com

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

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

hive-modoki: かんたんな Apache Hive のクローンを作っていた話

2021-06-08 追記 Hive を使うお仕事から離れることになったため、 hive-modoki は開発中止となりました。 転職先が見つかるとかで開発終わるパターンは織り込み済で、半分は作る事自体が目的ということにして保険かけてたので、まあ、大丈夫。 パーサやクエ…

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 のコード」…

Ruby/Racc: パース時のスタックの動きをFlameGraphっぽくビジュアライズする

Qiita の方に書きました。 qiita.com