記事の案内

「このブログには他にどういう記事があるの?」という方向けの案内です。 がんばったもの memo88.hatenablog.com memo88.hatenablog.com 続き: Rubyで素朴な自作言語のコンパイラを作った - memo88 memo88.hatenablog.com ごっこ系 いわゆる "Build your own…

Ruby/Racc: パースに失敗した位置(行、桁)を得る

パースに失敗したとき、失敗した位置をたとえば次のように表示したいですよね? parse error: line 2, col 5 foo bar ^ 短いのでとりあえず全部貼ります。 # parser.y class Parser rule program: "a" "b" "c" "d" ";" { puts "program found" result = val …

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

移植一覧に戻る やっつけなので汚いです。ライフゲームのコンパイルが通ったのでヨシ、というレベルのものです。 github.com 移植元 memo88.hatenablog.com ベースになっているバージョン: tag:50 のあたり メモ Go は 3, 4 年前にちょっとしたCLIツールを作…

Zig: コマンドライン引数を受け取って整数(i32)に変換する

Zig 昨日触りはじめたばかりでまだぜんぜん分かってません。 まずは std.os.argv でコマンドライン引数を取得します。 pkv は確認用のユーティリティ関数で、 print key value のつもり。 // arg_to_i_v1.zig const std = @import("std"); fn pkv(k: []const…

Zig: 1バイトごとに読み書きするだけのcatコマンドを書いてみた

Zig(ziglang) で標準入力から1バイト読んで標準出力に書くのを繰り返すだけの素朴な cat コマンドを書いてみました。 Zig はさっき触り始めたばかりで右も左も分からない状態です。 const std = @import("std"); pub fn main() !void { const outstream = …

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

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

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

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

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

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

「ふつうのコンパイラをつくろう」のcbcをUbuntu18.04(64bit)でビルドする

(2016-03-06) ふつうのコンパイラをつくろう Ubuntu64bit : 勉強日誌 (2020-07-23) 「ふつうのコンパイラをつくろう」のcbcをJava8以降+64bitで動かす - Qiita こちらの2つの記事を参考にさせてもらいました。ありがとうございます。以下の内容はこれらの記…

素朴な自作言語のコンパイラを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::ParseErro…

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

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

vm2gol-v2 移植まとめ

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

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

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

vm2gol v2 (47) 引数のパースの厳密化など

目次ページに戻る 前回からの差分をまとめて見る パーサが結構いいかげんなので、直します。 引数のパースの厳密化 一番適当なのが引数のパースです。 現状だと (1 2 a) のように区切りのカンマがなくても文法エラーになりません。 というわけで、 1つ目の引…

kairo-gokko (39) コンパイル時間短縮のために data.rb をスリム化

目次ページに戻る require_remote にかかる時間がさすがに長すぎるので、なんとかしたい……。 開発効率的にも辛いですし、他の人に見てもらうときもなるべく待たせないようにしたい。 というわけで調べてみました。 ネックになっているのは data.rb のコンパ…

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

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

vm2gol v2 (46) リファクタリング(主にコード生成器)

目次ページに戻る 前回からの差分をまとめて見る コード生成器で気になっていた部分を修正しました。 codegen_stmts() まわりの整理 修正前の状況を見てみましょう。 呼び出しの関係が次のようになっています。 呼び出す側 => 呼び出される側 codegen => cod…

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

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

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

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

vm2gol v2 (44) テストの追加

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

きしださんのかわいいリレーショナルデータベースをRubyで写経した

nowokay.hatenablog.com きしださんのかわいいリレーショナルデータベースの最初のバージョンを写経してみました。 この記事、もう8年前なんですね。ついこないだ読んだような気がしていましたが……。 簡単なものだったら自作できないかなと以前から思ってい…

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

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

red-arrow: Arrow::Tableのデータを組み立てる

とりあえず最低限の流れが知りたかったので、int32 だけの簡単なデータでやってみました。 require "arrow" # -------------------------------- # 列1 のデータを用意 builder = Arrow::Int32ArrayBuilder.new builder.append(1) builder.append(2) array1 …

consごっこ (2)

前 consのデータをメモリに置くとどうなるのか、というのを軽く試してみるつもりだったのが、 もうちょっと育ってしまいました。 ※ C言語云々と言っているところはかなりうろ覚えで適当です。だいぶ忘れてます……。 ※ また、既存のよく知られた何かに準拠して…

consごっこ

次 表面だけ見ると Ruby の Array、 Hash っぽいけど中身は cons セル、というものを書いてみました。 試してみたくなって、なんとなく書いてみた、という感じのものです。 cons セルさえあれば基本的なデータ構造が作れてなんとかなるんだな、という感触が…

kairo-gokko (38-2) タイムチャートの改善 / FPSの表示

目次ページに戻る タイムチャートの表示によるパフォーマンス劣化をなんとかします。 FPSを表示 まずは定石通りに計測から始めようと思いますが、 ここはお手軽に FPS を見て確認するだけで済ませます。 今回はそれで十分そうなので。 FPS は Window.real_fp…

kairo-gokko (38-1) タイムチャートを表示

目次ページに戻る / 前 / 次 タイムチャート機能を追加しました。 おおざっぱなアイデアとしてはこうです。 各時点での監視対象箇所の状態を記録する 記録したデータを使ってチャートを描画 これだけといえばこれだけなので、そんなに難しくなさそうだと思っ…

kairo-gokko (37) リレーの効果音をノイズっぽい音に変更

目次ページに戻る / 前 / 次 リレーの状態が変わったときの効果音は (25) 状態変更の伝播の過程を見たい のときにやっつけで作ったものを使っていましたが、もうちょっとリレーっぽい音にしたいなーと思っていました。 メカニカルな感じというか、なんかこう…