1バイトずつ読み書きする cat コマンドを書くところまでやっと辿りついた。

コメント残しておかないと何やってるか分からなくなって厳しい……慣れるのかなこれ。

ワードで細かく抽象化せよ、ワードの中はがんばって読め、という感じなのかな。

がんばるの大変そうなので(慣れるまでは?)コメント残す方向で進めた方がいいのかな。

[123, "fdsa"] が作れるようになった

作れるようになったというか、作って JSON にシリアライズするところまで。入れ子なので再帰が必要で、ワードの定義に recursive を追加するだけで OK。

gforth.org/manual/Recursion-Tu

[1,"a",[2,"b"],3,"c"] が作れるようになった

["漢字"] もテスト通った。
これでデータ構造整備+JSONシリアライズ編が終わり。次はJSONパース編。

前に書いた cat コマンドを流用して標準入力から1文字ずつ読む。

読んだ文字を1文字ずつメモリに書き込み

あ、dup が1個余計になってますわ

整数を表示するときに余計なスペースが付かないようにするためにこれを使う必要がある……?

Formatted numeric output (Gforth Manual)
gforth.org/manual/Formatted-nu

drop-1 〜 drop-N を作ったらだいぶスタック操作が楽になった(行儀が悪いかもしれないけどよく分かってない)

[1, "a", [2, "b"], 3, "c"] がパースできるようになった。
["漢字"] もすでにパースできているので、これでJSONパース編完了。

github.com/sonota88/mini-rucco

レキサ編 その1(やりなおし)
入力の最初の文字が f だったら [] を出力する。

lexer 1 (mrcl_lexer.fs) · sonota88/mini-ruccola-forth@4dd9339
github.com/sonota88/mini-rucco

フォロー

あーでも予約語でこれやると後でテスト通らなくなっちゃうのか。悩ましい。

Forth(Gforth)でかんたんな自作言語のコンパイラを書いた - Qiita
qiita.com/sonota88/items/cdc63

書きました

ログインして会話に参加
Fedibird

様々な目的に使える、日本の汎用マストドンサーバーです。安定した利用環境と、多数の独自機能を提供しています。