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

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