1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Perlで日本語スクリプト言語をゼロから作ってみた

1
Last updated at Posted at 2026-06-26

https://github.com/john-smith-7701/chabo-dsl/tree/main
Name
chabo-dsl -- chabo Domain Specific Language

Overview
Perlでゼロから実装した AST ベースのインタプリタです。 日本語DSL(Sugar.pm)を実装例として同梱しています。

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

※ "Chabo" はプロジェクト内で親しみを込めて付けた名前であり、日本語DSLそのものを指すものではありません。

Description
日本語DSLは Sugar.pm として実装されており、エンジン本体は自然言語に依存しません。Sugar.pm を置き換えることで、他言語風のDSLを実装できます。

Perl製・ゼロから実装
Tokenizer(字句解析)
Parser(構文解析)
AST生成と評価実行
ユーザー定義関数
再帰呼び出し
スコープ管理
continue / return などの制御構文
配列・ハッシュアクセス
日本語DSL対応
Mojolicious非依存
POD込み約750行(2026/6時点)
Demo
Web実行デモ https://qweer.info/api/Ast/ast

・1 + 2 * 3 https://qweer.info/api/Ast/ast?calc=1%2b2*3
・2 ** 3 ** 2 https://qweer.info/api/Ast/ast?calc=2**3**2
・(1+2)(3+4) https://qweer.info/api/Ast/ast?calc=(1%2b2)(3%2b4)
・最大公約数を求める

 gcd(a,b) = b?gcd(b,a % b):a;
 gcd(72,30);

・フィボナッチ数列を計算

 fb(x,y,z) = x < 1?z:fb(x-1,y+z,y);
 join(",",map(fb($_,1,0),0..30));

・日本語DSL

ans={};
t=[];
【ハッシュを配列に変換】
keyVal(k)=(
 a=length(k) ? shift(k):return();
 push(t,a); push(t,ans{a}); continue();
);
【計算の定義】
・単価と数量で金額を求めるには単価*数量。
・単価と数量と税率で税込金額には単価*数量*(1+税率/100)。

ans{金額}=金額を求める(100,24);
ans{税込み}=税込金額(100,3,8);

青=1;緑=2;赤=3;黄=4;
信号=黄;
ans{交差点}= もし信号が青か緑ならすすめ以外で、もし信号が黄なら注意以外は止まれ。

key:=keys(ans);
keyVal(key);
join(":",t);

---> 交差点:注意:金額:2400:税込み:324

遊んでみてね:relaxed:

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?