きっかけ
自分はポケモンの動画を見て任意コード実行面白そうだな、と思いました。
しかしポケモンのコードがz80という機械語で、アセンブリ難しいな、と思いました。
そこで!自分で 新しく単純な機械語を作ろう! と思いました。
とりあえず単純に作って、多分世界一なんじゃないかってぐらい単純なのが出来ました。
それでゲームを作ろうと思っていたので、C#でスペースで区切る非常に単純なアセンブリ言語に相当する言語を作りました。
それでも難しいです。もう非常に。単純を目指したせいで。
それで、C言語に相当する言語作りたい...と思いました。
それでgccのソース借りるか?と思って中を見たら地獄。ということで 自作し始めました。
開発
2024年9月に新しいプログラミング言語のコンパイラを作り始めました。
メモ:Gitのコミットメッセージが適当なせいで開発開始時期を特定するのめっちゃ大変でした。
良い子のみんなはコミットメッセージはちゃんとしようね!
空白文字だったら続けて、文字部分を保存して、...とめっちゃ構文解析コード書きました。
地獄の日々でした。毎月更新してたアプリの更新も忘れ、滅茶苦茶書きました。
停止
ところが突然、手が止まりました。難しすぎました。理由は以下です。
- IFの中の命令部分の移植が難しい
- 演算子の部分がむずい
- 例外への直面が怖い
その時我を思い出し、更新していなかったアプリを更新し、ゲームしました。
そしてこの言語をどうするか、没にしようか、そう考える日々...
構文解析ライブラリとの出会い
前にプログラミング言語つくる記事とかあったし、
なんかそういうライブラリねえかな...とネットサーフィン。
やっぱPythonとかかな~と思って検索すると...出会ってしまったのです。
Larkに。
PythonにLarkという構文解析ライブラリがありました。
他のライブラリはどうかな~と探した結果、Larkがベストでした。
Larkの記事を検索し始め、LarkのEBNF等を学び、これどうすればいいんだ?と試行錯誤。
すると、一か月かかっても出来なかった構文解析が一日で終わってしまいました。
まあ実際のアセンブリコードの生成は別ですけどね...
現状
今の進行状況は、構文解析だけは終わって、今はその結果に基づいてアセンブリコードを生成するコードを作っています。
そこまで複雑じゃないので一週間で出来るかな~って感じです。
結論
複雑な処理は出来るだけライブラリに任せよう☆☆