chabo-dsl Language Reference
概要
chabo-dsl は式評価型の軽量スクリプト言語です。
サポート機能:
- 数値演算
- 文字列操作
- 比較演算
- 論理演算
- 三項演算子
- 変数
- グローバル変数
- 配列
- ハッシュ
- ユーザー定義関数
- 再帰呼び出し
- 組み込み関数
- データ型
数値
123 3.14 -10
例
1 + 2 * 3
結果
7
文字列
"hello" 'world'
例
"abc"
変数
代入にて変数を定義
x=10;
arr=[1,2,3];
has={a:1,b:2};
変数
代入
- ローカル変数
a = 10 b = a + 5
- グローバル変数
a := 10
:= は global 領域へ保存します。
配列
[1,2,3]
アクセス
a[0]
内部変換
array(a,0)
ハッシュ
{
name:"john",
age:20
}
アクセス
user{name}
内部変換
hash(user,name)
演算子
優先順位は小さい値ほど弱い。
- 文区切り
;
例
a=1; b=2; a+b
結果
3
論理演算
- OR
||
例
a || b
- AND
&&
例
a && b
短絡評価あり。
代入
代入
=
例
a = 10
- 加算代入
+=
例
count += 1
- グローバル代入
:=
例
config := 1
比較
- 等しい
==
- 等しくない
!=
- 小さい
<
- 小さいか等しい
<=
- 大きい
>
- 大きいか等しい
>=
自動型判定比較:比較時はlooks_like_number()を使用する。
数値なら
10 < 20
文字列なら"abc" < "xyz"を
lt gt le ge eq ne
で比較する。
算術演算
- 加算
+
- 減算
-
- 乗算
*
- 除算
/ ゼロ除算時: Zero divied!!例外。
- 剰余
%
- 累乗
**
例
2 ** 8
結果
256
単項演算子
- 符号反転
-x
内部表現 NGE
- 否定
!x
三項演算子
構文
条件 ? 真値 : 偽値
例
age >= 20 ? "adult" : "child"
インクリメント
- 前置
++x --x
- 後置
x++ x--
ユーザー定義関数
定義構文
add(a,b) = a+b
利用
add(1,2)
結果
3
関数呼び出し
func(arg1,arg2)
例
sqrt(9)
制御構文
- return
ユザー関数を抜ける
return(expr)
例
fact(n)= n<=1 ? 1 : n*fact(n-1) return(fact(5))
- continue
ユーザー定義関数の先頭にもどる
continue()
再帰
再帰処理はサポートされます。
例
fact(n)=
n<=1
? 1
: n * fact(n-1)
組み込み関数
数学
- sqrt
- sqrt(x)
- sin
- sin(x)
- cos
- cos(x)
- int
- int(x)
文字列
- uc
- uc(text) 大文字化。
- lc
- lc(text) 小文字化。
- length
- length(x) 文字列長または配列長。
- substr
- substr(text,start,length)
- split
- split(regex,text)
戻り値 配列
- join
- join(sep,array)
例
join(",",["a","b","c"])
結果
"a,b,c"
- match
- match(regex,text)
戻り値 配列 正規表現にマッチした一覧。
- replace
- replace(regex,replacement,text)
例
replace("a","X","abc")
結果
Xbc
配列操作
- push
- push(arr,value)
- pop
- pop(arr)
- shift
- shift(arr)
- unshift
- unshift(arr,value)
範囲生成算子
- ..
1 .. 10 結果 [1,2,3,4,5,6,7,8,9,10]
添字アクセス
- arr[0]
ハッシュアクセス
- key
- keys(hash)
map
戻り値は配列
構文
- map(expr,array)
特殊変数 $_ が各要素を保持 例 map($_ * 2,[1,2,3]) 結果 [2,4,6]
配列・ハッシュアクセス
- 配列
arr[3]
- ハッシュ
user{name}
実行制限
再帰制限
1000呼び出しを超過時にstack over!
実行タイムアウト
5秒超過時にAST::Timeoutで例外を発生する
変数名
Unicode対応。 正規表現: [\p{L}_][\p{L}\p{N}_]*
[有効例] foo _bar 数量 売上2025
- 無精・短気・傲慢