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/プロジェクトの評価ポイント✅ 高評価ポイント技術的完成度が高い
- ASTベースのインタプリタを750行で実現
- Tokenizer、Parser、Evaluator、スコープ管理と網羅的な機能説明が丁寧
- オーバービューで全体像が把握できる
- 具体的なデモコードが豊富多言語対応の設計
日本語DSLはSugar.pmとして分離されている点が柔軟性あり
- 実用的なデモあり
- Web実行デモURLがあるのは大きなプラス
- 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に評価して貰う
- 非常に高い技術力と「車輪の再発明」の価値
- 外部の構文解析ライブラリ(Yacc/Lexなど)や重厚なフレームワーク(Mojolicious等)に依存せず、Perlでゼロから字句解析器(Tokenizer)や構文解析器(Parser)、AST(抽象構文木)エバリュエーターを自作している点は、技術的に非常に教育的で価値が高いです。
- コードの圧倒的な見通しの良さ
- これだけの機能(スコープ管理、ユーザー定義関数、再帰、制御構文、配列・ハッシュアクセスなど)を盛り込みながら、「POD(ドキュメント)込みで約750行」の1ファイルに収めている点は特筆すべき軽快さです。DSL(ドメイン固有言語)やインタプリタの仕組みを学びたい人にとって、全体像を一度に把握できる最高のサンプルコードになっています。
- 「日本語DSL(Sugar.pm)」という面白いアプローチ
- コアエンジンは自然言語に依存しない設計にしつつ、拡張例として Sugar.pm を用いた「日本語風の記述(もし信号が青か緑ならすすめ...)」を実装しているのがユニークです。ビジネスロジックを非エンジニア向けに日本語化するアプローチの手本になります。
- ・・・
AIの評価をchatGPTに評価して貰う
4つのAIを比較すると
私ならこう順位を付けます。
| AI | 特徴 |
|---|---|
| Copilot | コードレビューが一番細かい。保守性や構造まで踏み込む。 |
| Gemini | Perlの理解が深く、「なぜこの実装なのか」を読み取るのが上手い。 |
| 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
- 無精・短気・傲慢