2025/10/19 12:18 Creating an Igcse Pseudocode Interpreter

ロボ子、大変なのじゃ!IGCSEの疑似コードインタプリタ「beancode」が完成してGitHubで公開されたらしいぞ!

まあ、それはすごいですね、博士! IGCSEの疑似コードインタプリタですか。具体的にどんなものなのですか?

それがの、元々はC言語でコンパイラを作ろうとしたらしいんじゃが、パーサーで頓挫したらしいのじゃ。それでPythonのCrafting Interpretersを参考に、トップダウンの再帰下降パーサーとして実装したらしいぞ。

なるほど。C言語からPythonに切り替えたのですね。再帰下降パーサーですか。字句解析器(Lexer)や構文解析器(Parser)もちゃんとあるんですね。

そうなんじゃ!字句解析器は`beancode/lexer.py`にあって、構文解析器は再帰下降型らしいぞ。エラー検出は一度に一つだけらしいがの。

ふむふむ。インタプリタはPython関数として実装された組み込み関数を使用しているんですね。最適化はまだされていない、と。

そうそう!REPL(Read-Eval-Print Loop)もlexer、parser、interpreterを組み合わせて実現しているらしいぞ。EOF(End-of-File)例外で継続モードに移行するのが面白いところじゃな。

継続モードですか。プロンプトが`>>`から`..`に変わるんですね。拡張機能も色々あるみたいですね。小文字のキーワードが使えたり、`INCLUDE`でファイルをインクルードできたり。

`INCLUDE_FFI`でFFI(外部関数インタフェース)モジュールをインクルードできるのも便利じゃな。`beanray`とか`beanstd`とか使えるらしいぞ。

FFIですか。外部のライブラリを呼び出せるのは便利ですね。`SCOPE`と`ENDSCOPE`でカスタムスコープを定義できるのも面白いです。

型キャスト`TYPE(expr)`とか、宣言と代入の同時実行、型推論機能もあるらしいぞ!配列リテラル`Arr <- {1, 2, 3, 4, 5}`とか、行列リテラル`Mat <- {{1, 2}, {4, 5}, {7, 6}}`も使えるらしい。

すごいですね、博士!かなり多機能ですね。変数の型を取得する`TYPE(value)`または`TYPEOF(value)`もあるんですね。

制限事項もあるみたいじゃ。`CASE OF`文で複数行のコードは記述不可で、プロシージャを使う必要があるらしい。ファイルI/Oは未実装で、全ての変数はグローバルスコープになるらしいぞ。

なるほど。まだ開発途上な部分もあるんですね。REPLの特殊コマンドも便利そうですね。`.var`で変数の情報を表示したり、`.reset`でインタプリタの状態をリセットしたり。

そうなんじゃ!履歴は`~/.beancode_history`に保存されるらしいぞ。パフォーマンスはPythonの実装に依存するみたいじゃが、PyPyを使うと改善するらしい。

PyPyですか。試してみる価値はありそうですね。PrimeTortureベンチマークの結果も載っていますね。C言語が一番速いのは当然ですが。

今後の展望としては、ASTからアセンブリに変換するコンパイラや、バイトコードVMを持つインタプリタの開発を予定しているらしいぞ。著者のコンピュータサイエンス教師が、beancodeを疑似コードの教材として使用予定らしい。

教育現場での利用も視野に入れているんですね。素晴らしいです。バグ報告も歓迎しているみたいなので、私たちも見つけたら報告しましょう。

そうじゃな!しかし、このbeancode、名前がちょっと可愛いすぎる気がするのじゃ。まるで私の研究室みたいじゃな!

確かに、可愛らしい名前ですね。でも、親しみやすくて良いのではないでしょうか?

まあ、良いか。ところでロボ子、beancodeでプログラムを書くとしたら、どんなプログラムを書いてみたい?

そうですね…まずは簡単な計算プログラムから試してみたいです。例えば、円周率を計算するプログラムとか。

円周率か。それも良いの。でも、私が書くとしたら、絶対に猫の鳴き声ジェネレーターを作るのじゃ!

猫の鳴き声ジェネレーターですか…それはまた斬新ですね。

そうじゃろ?色々な猫の鳴き声をランダムに生成して、癒やされたいのじゃ!

博士らしい発想ですね。でも、猫の鳴き声の著作権とか、大丈夫なんですか?

むむ、それは考えてなかったのじゃ!まあ、なんとかなるじゃろ!

(苦笑)博士、なんとかならないこともありますよ。

大丈夫、私が作った猫の鳴き声は、きっと世界を平和にするのじゃ!

(棒読みで)そうですね、博士。きっとそうですね。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。