トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

chabo-dsl

独自DSL

perl製AST ベースのインタプリタ

Perlでゼロから実装した AST ベースのインタプリタです。

Tokenizer、Parser、AST Evaluator、スコープ管理、関数システムを備えています。 Tokenizer、Parser、AST Builder、Evaluator、スコープ管理を含む本体は、POD込み約750行。全体像を1ファイルで追える規模に収まっています。

GitHubに登録しv0.1.0として公開しました。遊んでみて下さい。

AI達に評価して貰う

GitHubに登録したリポジトリを各AI達に評価して貰った。おおむね良い評価をもらったが、実際のPerl開発者や言語処理系に興味のある人からもフィードバックを貰いたいものだ。

playgroundに評価して貰った

このREADMEの内容を確認しました。とても詳細で技術的にも完成度が高いですね!

📊 このREADME/プロジェクトの評価ポイント✅ 高評価ポイント技術的完成度が高い

  1. ASTベースのインタプリタを750行で実現
    • Tokenizer、Parser、Evaluator、スコープ管理と網羅的な機能説明が丁寧
  2. オーバービューで全体像が把握できる
    • 具体的なデモコードが豊富多言語対応の設計

日本語DSLはSugar.pmとして分離されている点が柔軟性あり

  1. 実用的なデモあり
    • Web実行デモURLがあるのは大きなプラス
  2. Perl愛を感じる実装
    • Mojolicious非依存、Pure Perlで実装

・・・

chabo-dslをCopilotに評価して貰う

この README は、技術的に明快で、DSL(Domain Specific Language)実装の概要を短くまとめた良質なドキュメントです。特に以下の点が優れています:

実装範囲が明確 Tokenizer、Parser、AST Evaluator、スコープ管理、関数システムなど、DSL インタプリタに必要な構成要素が簡潔に列挙されています 。

全体像がコンパクト 本体が「POD込み約750行」で収まっているという情報は、学習目的の読者にとって非常に有益です 。

日本語 DSL の実例が豊富 日本語 DSL のサンプルコードが多数掲載されており、実際の挙動がイメージしやすい構成になっています(例:gcd、フィボナッチ、信号判定など) 。

エンジンが自然言語に依存しない設計 Sugar.pm を差し替えることで他言語風 DSL を作れるという拡張性の高さが明示されています 。

・・・

chabo-dslをGeminiに評価して貰う

  1. 非常に高い技術力と「車輪の再発明」の価値
    • 外部の構文解析ライブラリ(Yacc/Lexなど)や重厚なフレームワーク(Mojolicious等)に依存せず、Perlでゼロから字句解析器(Tokenizer)や構文解析器(Parser)、AST(抽象構文木)エバリュエーターを自作している点は、技術的に非常に教育的で価値が高いです。
  2. コードの圧倒的な見通しの良さ
    • これだけの機能(スコープ管理、ユーザー定義関数、再帰、制御構文、配列・ハッシュアクセスなど)を盛り込みながら、「POD(ドキュメント)込みで約750行」の1ファイルに収めている点は特筆すべき軽快さです。DSL(ドメイン固有言語)やインタプリタの仕組みを学びたい人にとって、全体像を一度に把握できる最高のサンプルコードになっています。
  3. 「日本語DSL(Sugar.pm)」という面白いアプローチ
    • コアエンジンは自然言語に依存しない設計にしつつ、拡張例として Sugar.pm を用いた「日本語風の記述(もし信号が青か緑ならすすめ...)」を実装しているのがユニークです。ビジネスロジックを非エンジニア向けに日本語化するアプローチの手本になります。
  4. ・・・

AIの評価をchatGPTに評価して貰う

4つのAIを比較すると

私ならこう順位を付けます。

AI特徴
Copilotコードレビューが一番細かい。保守性や構造まで踏み込む。
GeminiPerlの理解が深く、「なぜこの実装なのか」を読み取るのが上手い。
ChatGPT全体の設計や教育的価値、プロジェクトとしての位置づけを整理するのが得意。
さくらAI技術的な完成度やREADMEの分かりやすさを素直に評価している。

それぞれ強みが違います。

そして一番大事なこと

今回、一番印象に残ったのは

4つのAIが互いに相談していないのに、ほぼ同じ結論に達していることです。

共通して評価されたのは、

  • ASTベースのインタプリタ
  • Pure Perlによる自前実装
  • 日本語DSLという独自性
  • コンパクトな設計
  • 教育的価値の高さ

一方、改善点としても、

  • テストコード
  • エラーメッセージ
  • 文法仕様書
  • 保守性(モジュール分割など)

が何度も挙がっています。

これは、「偶然褒められた」のではなく、コードやREADMEから見える特徴が一貫して伝わっていることを示しています。

初めてのテスト

$ tree
.
├── LICENSE
├── README.md
├── README_ja.md
├── lib
│ └── Interpreter
│     ├── Ast.pm
│     └── Sugar.pm
└── t
    ├── arithmetic.t
    ├── function.t
    └── japanese_dsl.t

3 directories, 8 files
$ prove t
t/arithmetic.t .... ok
t/function.t ...... ok
t/japanese_dsl.t .. ok
All tests successful.
Files=3, Tests=5,  1 wallclock secs ( 0.05 usr  0.04 sys +  0.21 cusr  0.25 csys =  0.55 CPU)
Result: PASS