AstraiaはJSON形式のオブジェクトを簡約するライブラリです。
規定された規則に従ってオブジェクトを簡約していきます。
JSONオブジェクトで表された構文木(AST)の最適化等に使用することができます。
Astraiaのインストール:
npm install astraia
モジュールの使用(node.js):
var A = require('astraia');
モジュールの使用(ブラウザ):
<script src='astraia.js'></script>
Astraiaは規則を基にしてオブジェクトを簡約します。
例として、足し算と引き算からなるASTを簡約するプログラムを以下に示します。
var rules = [{
pattern: {
"type": A.eqv("add"),
"left": A.number,
"right": A.number
},
action: function(obj) {
return obj.left + obj.right;
}
}, {
pattern: {
"type": A.eqv("sub"),
"left": A.number,
"right": A.number
},
action: function(obj) {
return obj.left - obj.right;
}
}];
// outputs 2
A.scan(rules, {
"type": "add",
"left": {
"type": "add",
"left": 1,
"right": 2
},
"right": {
"type": "sub",
"left": 3,
"right": 4
}
});
規則はpatternとactionからなるオブジェクトからなる配列です。プレースホルダには以下のものがあります。
詳細はリファレンスを参照してください。
名称 | 内容 |
---|---|
eqv | 走査中に出現した値が与えられた値と等しい |
equal | 走査中に出現したオブジェクトが与えられたオブジェクトと構造も含めて等しい |
any | nullか未定義でない |
number | 数値であるか |
string | 文字列であるか |
object | 配列でないオブジェクトか |
array | 配列か |
regex | 正規表現とマッチするか |
range | 与えられた範囲内にあるか |
all | 配列の全ての要素が与えられた述語を満たすか |
exists | 配列の1つの要素が与えられた述語を満たすか |
Astraiaのリファレンスはここにあります。