目次ページに戻る / 前 / 次 前回からの差分をまとめて見る 間接メモリ参照のフォーマットの改良 機械語での間接メモリ参照はこれまでアセンブリでとまったく同じ [bp-2], [bp+3] のようなフォーマットにしていて、 VM では /^\[bp-(\d+)\]$/ のような正規表…
目次ページに戻る / 前 / 次 前回からの差分をまとめて見る vgparser.rb で行っていた字句解析処理を vglexer.rb に分離します。 そうしなければいけない強い理由はあまりなくて、その方が他言語への移植がスムーズだった経験から、Ruby版にもフィードバック…
かんたんな自作言語のコンパイラをいろんな言語で書いてみるシリーズ 12回目は Kotlin です。 やっつけなので汚いです。ライフゲームのコンパイルが通ったのでヨシ、というレベルのものです。 github.com 移植元 memo88.hatenablog.com ベースになっているバ…
目次ページに戻る / 前 / 次 前回からの差分をまとめて見る これまで機械語コードのフォーマットはこのような YAML ファイルにしていました。 (以下便宜的に「可変長風」と呼びます) --- - call - 1029 - exit - label - vram_set - push - bp ... これを…
かんたんな自作言語のコンパイラをいろんな言語で書いてみるシリーズ 11回目は Zig です。 Zenn に引っ越しました。 zenn.dev
Qiita の方に書きました。 qiita.com
Qiita の方に書きました。 qiita.com
Qiita の方に書きました。 qiita.com
blog.sushi.money やってみました。調べてないけど9割方セルクマ ブクマしてくださった方、ありがとうございます。 memo88の2020年ブックマークランキングベスト24(累計30ブックマーク) # タイトル 1位 きしださんのかわいいリレーショナルデータベースをRu…
Qiita の方に書きました。 qiita.com
Qiita の方に書きました。 qiita.com
移植一覧に戻る Qiita の方に書きました。 qiita.com
Qiita の方に書きました。 qiita.com
Qiita の方に書きました。 qiita.com
移植一覧に戻る やっつけなので汚いです。ライフゲームのコンパイルが通ったのでヨシ、というレベルのものです。 github.com 移植元 memo88.hatenablog.com ベースになっているバージョン: tag:50 のあたり (2021-06-20 追記) ステップ60 の修正まで反映し…
Zig 昨日触りはじめたばかりでまだぜんぜん分かってません。 まずは std.os.argv でコマンドライン引数を取得します。 pkv は確認用のユーティリティ関数で、 print key value のつもり。 // arg_to_i_v1.zig const std = @import("std"); fn pkv(k: []const…
Zig(ziglang) で標準入力から1バイト読んで標準出力に書くのを繰り返すだけの素朴な cat コマンドを書いてみました。 Zig はさっき触り始めたばかりで右も左も分からない状態です。 <追記 2022-07-17> v0.8.0 で InStream, OutStream がそれぞれ reader,…
Zenn に引っ越しました。 zenn.dev
目次ページに戻る / 前 / 次 前回からの差分をまとめて見る 変数宣言周りの修正(パーサ編) 第48回 変数宣言のコード生成処理の改善など で変数宣言まわりを変更したときは特に考えてなかったんですが、これはパーサも合わせておいた方が良さそうに思えます…
移植まとめに戻る やっつけなので汚いです。ライフゲームのコンパイルが通ったのでヨシ、というレベルのものです。 github.com C♭は書籍 『ふつうのコンパイラをつくろう』の題材として作られた、C によく似た言語です。コンパイラ cbc は Java製。 移植元 m…
(2016-03-06) ふつうのコンパイラをつくろう Ubuntu64bit : 勉強日誌 (2020-07-23) 「ふつうのコンパイラをつくろう」のcbcをJava8以降+64bitで動かす - Qiita こちらの2つの記事を参考にさせてもらいました。ありがとうございます。以下の内容はこれらの記…
移植まとめに戻る Qiita に引っ越しました qiita.com
移植一覧に戻る 20年ぶりくらいにC言語のコードを書きました。 かなり忘れてます。 やっつけなので汚いです。ライフゲームのコンパイルが通ったのでヨシ、というレベルのものです。 github.com 移植元 memo88.hatenablog.com ベースになっているバージョン: …
目次ページに戻る / 前 / 次 前回からの差分をまとめて見る まずはしょぼいミスを修正……。 --- a/vgparser.rb +++ b/vgparser.rb @@ -478,7 +478,7 @@ if $PROGRAM_NAME == __FILE__ begin tree = parser.parse() - rescue ParseError => e + rescue Parser:…
目次ページに戻る / 前 / 次 前回からの差分をまとめて見る Java版 を書いているときに codegen_stmts() の微妙なところに気付いてしまいました。 def codegen_stmts(fn_arg_names, lvar_names, stmts) alines = [] stmts.each do |stmt| stmt_head, *stmt_r…
機能を減らしてハードルを下げまくった、初心者・入門者(=自分)向けの、かんたん・素朴で割といいかげんな自作言語のコンパイラ Mini Ruccola(vm2gol-v2) の移植です。 移植元の Ruby版のコンパイラ部分だけだと 1000行くらい、という素朴さ。 ノリとし…
移植一覧に戻る Java で書いてみました。やっつけなので汚いです。ライフゲームが動いたのでヨシ、というレベルのものです。 github.com 移植元 memo88.hatenablog.com ベースになっているバージョン: tag:47 のあたり メモ アセンブラ・VM は移植対象から外…
目次ページに戻る / 前 / 次 前回からの差分をまとめて見る パーサが結構いいかげんなので、直します。 引数のパースの厳密化 一番適当なのが引数のパースです。 現状だと my_func(1 2 a) のように区切りのカンマがなくても文法エラーになりません。 という…
目次ページに戻る require_remote にかかる時間がさすがに長すぎるので、なんとかしたい……。 開発効率的にも辛いですし、他の人に見てもらうときもなるべく待たせないようにしたい。 というわけで調べてみました。 ネックになっているのは data.rb のコンパ…
移植一覧に戻る Dart で書いてみました。やっつけなので汚いです。Dart よく知らないけどライフゲームが動いたのでヨシ、というレベルのものです。 github.com 移植元 memo88.hatenablog.com ベースになっているバージョン: tag:46 のあたり 追記 2021-03-21…