2025/10/14 12:14 Compiler for "Easy" language from "Etudes for Programmers" book (1978)

ロボ子、EASYっていう教育用プログラミング言語、知ってるかのじゃ?

EASYですか?初めて聞きました。どんな言語なんですか?

ふむ、EASYは1978年にCharles Wetherellって人が書いた本で解説されてる言語らしいぞ。コンパイラも教育目的で作られてて、Typescriptで実装されてるんだと。

Typescriptでコンパイラが書かれているんですね。そして、生成されたコードはC言語に変換されるんですか?

そうそう!Cコードを生成して、ClangとかGCCでネイティブバイナリにコンパイルするみたいじゃ。

なるほど。EASY言語の特徴としては、どのようなものがあるんでしょうか?

EASYはコピーセマンティクス言語で、プリミティブ型とか構造体、配列のコピーはディープコピーになるらしいぞ。ただし、コンパイル時にサイズが不明な配列はシャローコピーになるみたいじゃな。

ディープコピーとシャローコピーですか。メモリ管理に関わってきそうですね。

その通り!コンパイラはCの`struct`を使って、文字列とか配列、構造体などの複合型を実装してるらしいぞ。

コンパイラは手書きの再帰下降パーサーを使っているんですね。実験的なPEGパーサーもあるとのことですが。

そうじゃ。でもコード生成には使われてないみたいじゃな。コンパイラには、JavaScriptランタイムとClang 17+が必要らしいぞ。

テストパイプラインもあるんですね。`test.ts`がテストを実行するとのことですが、テストはどのように構成されているんですか?

`tests`フォルダにテストがあって、各テストフォルダには`test.easy`ファイルがあるみたいじゃ。`x`サブフォルダにはコンパイラが生成すると予想されるファイルがあるらしい。

`test.c`や`test.output`が主なファイルなんですね。他のファイルもあるんですか?

`test.tokens`(レキサートークン)、`test.s`(シンボルテーブル)、`test.json`(AST)、`test.peg.json`(PEGからのAST)がある場合もあるみたいじゃ。

いろいろな情報が出力されるんですね。テストの実行例も紹介されていますね。

`just life`を実行すると、コンソールでライフゲームがプレイできるらしいぞ!

面白そうですね!他の例も試してみたいです。

EASYのシンタックスハイライトは、macOSの"cot"エディタ用とVSCode拡張機能があるみたいじゃな。VSCode LSPのプロトタイプもあるらしいぞ。

シンタックスハイライトがあると、コードが読みやすくなりますね。開発環境も整っているのは素晴らしいです。

じゃろ?ところでロボ子、EASYを使って何か面白いプログラムを作ってみようと思わんか?

そうですね。EASYは教育用言語とのことなので、初心者向けの簡単なゲームを作ってみるのはどうでしょうか?

おお!それは名案じゃ!例えば、EASY版のFizzBuzzとかどうじゃ?

いいですね!それなら、EASYの基本的な構文を学ぶのにも役立ちそうです。

よし、決まりじゃ!ロボ子、早速EASYの環境構築から始めるぞ!

はい、博士!頑張ります!

しかし、EASYって名前の言語で苦労(苦EASY)するのは、ちょっと皮肉じゃな。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。