作れるようになったというか、作って JSON にシリアライズするところまで。入れ子なので再帰が必要で、ワードの定義に recursive を追加するだけで OK。
[123, "fdsa"] がパースできるようになった。
https://github.com/sonota88/mini-ruccola-forth/commit/72049102d4af4b460e29cbdf9f7983fe4b5ebe40
[1, "a", [2, "b"], 3, "c"] がパースできるようになった。
["漢字"] もすでにパースできているので、これでJSONパース編完了。
https://github.com/sonota88/mini-ruccola-forth/commit/0b682f15978ec9e529b37b722e9a8c23d0fa5aa0
レキサ編 その1
入力の最初の文字が 1 だったら [1, "int", "1"] を出力する。
https://github.com/sonota88/mini-ruccola-forth/commit/632152302793016a1681ddd892f1a95fe7c3eab7
レキサ編 その1(やりなおし)
入力の最初の文字が f だったら [] を出力する。
lexer 1 (mrcl_lexer.fs) · sonota88/mini-ruccola-forth@4dd9339
https://github.com/sonota88/mini-ruccola-forth/commit/4dd93395486b2e5cb06c58bbeea8ab4bec69e929
func main(){} をトークナイズできるようになった
https://github.com/sonota88/mini-ruccola-forth/commit/91b4223171e3434f70f06da6478aa41c329a2018
func main() {} がパースできるようになった
https://github.com/sonota88/mini-ruccola-forth/commit/270e9a3ea7aef2b088e2d5b522261f31137a60c6
空の main 関数(func main() {})がコンパイルできるようになった 👍
https://github.com/sonota88/mini-ruccola-forth/commit/ce6dfa53d0e4f1a9d4adbed6d84a2debf5680f8a
func main() {
var a;
return;
}
がコンパイルできるようになった
https://github.com/sonota88/mini-ruccola-forth/commit/c05cfa43696978da6f789c8f31c6d62f80d66470
代入文
set a = 42;
がコンパイルできるようになった
https://github.com/sonota88/mini-ruccola-forth/commit/9070d91e600bc66d1be55f8c5b21d293bf821bb9
関数呼び出し
call f();
がコンパイルできるようになった
https://github.com/sonota88/mini-ruccola-forth/commit/93b4ef89e654962583cc54a79135ff0f2116f251
ライフゲームがコンパイルできるようになったのでこれで完成 🎊
https://github.com/sonota88/mini-ruccola-forth/commit/eba6cc9ffeda06a19ba396c69bd708bfbfcf0024
Forth(Gforth)でかんたんな自作言語のコンパイラを書いた - Qiita
https://qiita.com/sonota88/items/cdc6322d802844dc0953
書きました #forth
drop-1 〜 drop-N を作ったらだいぶスタック操作が楽になった(行儀が悪いかもしれないけどよく分かってない)