!!概要 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