# 仕様
Jsonpiler 言語の仕様。
## 評価(Evaluation)
Jsonpiler プログラムは、単一の JSON 値として表現されます。
各 JSON 値は独立して評価されますが、配列(`[]`)やオブジェクト(`{}`)の場合は例外です。
### 配列
- 配列内の各要素は順に評価されます。
- 結果は、評価済みの要素を順序を保って格納した新しい配列になります。
```json
[1, { "+": [2, 3] }, "text"]
// => [1, 5, "text"]
```
### オブジェクト
- オブジェクトの各キーは関数名として解釈されます。
- 各値は評価され、関数の引数として渡されます。
- キーが登録済みの組み込み関数に一致する場合はそれを使用し、それ以外はユーザー定義関数が検索されます。
- 複数のキー・関数エントリがサポートされており、挿入順に評価されます。
- 最後に呼び出された関数の戻り値が最終的な評価結果として返されます。
- 空の`Block`はNullを返します。
```json
{
"message": ["123", "456"],
"+": [1, 2]
}
// => "message" を評価し、その後 "+" を評価。"+" の結果を返す
```
## 終了コード(Exits)
プログラム全体がIntに評価された場合は、それを終了コードとして返します。
jsonpiler が返す終了コードは生成した.exeファイルの終了コードである32bit符号付き整数です。
コンパイルエラーが発生した場合、または実行ファイルが生成されなかった場合は、終了コードは 1 になります。
## 文字エンコーディング
このプログラムは UTF-8 をサポートします。
## 演算子優先度一覧
高いほど結合が優先される
| 0 | `=`, `+=`, `-=`, `*=`, `/=` |
| 1 | `or` |
| 2 | `xor` |
| 3 | `and` |
| 4 | `<`, `<=`, `>`, `>=`, `==`, `!=` |
| 5 | `+`, `-` |
| 6 | `*`, `/`, `%` |