aiscript
aiscript copied to clipboard
JSON5のスーパーセットにする
misskey-dev/misskey#6608 AiScriptがJSON5のスーパーセットとなるには以下の言語拡張が必要?
- オブジェクトリテラル
- [x] #894
- #62
- [ ] #889
- JSON5IdentifierはECMAScript 5.1のIdentifierNameと同じ
- 一部の非ASCII文字・
$・Unicodeエスケープシーケンス・予約語も使用できるようにする必要がある
- [x] #894
- 文字列
- [ ] #392
- ECMAScript 5.1のEscape Sequence
- [ ] #392
- 数値
- [ ] 定数
Infinity,NaN - [ ] 整数部分と小数点だけ、小数点と小数部分だけの記法
- [ ] 指数表記
- [ ] 16進表記 (JSON5では2進表記や8進表記に対応する必要はない)
- [ ] 定数
- [ ] コード中のU+2028 (line separator), U+2029 (paragraph separator)を改行として扱う
- [ ] コード中のU+000B (vertical tab), U+000C (form feed), U+00A0 (non-breaking space), U+FEFF (BOM), その他Unicode Zsカテゴリの文字を空白として扱う
- [ ] #899
参考
- The JSON5 Data Interchange Format - JSON5の仕様書
- json5/json5-tests - JSON5のテストスイート
スーパーセットを目指すのが大変なら、今JSONではなくJSON5にしている理由(例: keyをクォーテーションする必要がないなど?)を満足できる状態にするだけで良い可能性はある
あとはAiSON(仮)を簡単にパースできるユーティリティを作るとか
スーパーセットを目指すのが大変なら、今JSONではなくJSON5にしている理由(例: keyをクォーテーションする必要がないなど?)を満足できる状態にするだけで良い可能性はある
あとはAiSON(仮)を簡単にパースできるユーティリティを作るとか
メタデータブロックをうまく使えば純粋なAiScript Objectをパースできそう
パーサを使うならInfinityとNaNは定数ではなく、リテラルにするなど特別に扱う必要がありそう
パーサを使うなら
InfinityとNaNは定数ではなく、リテラルにするなど特別に扱う必要がありそう
リテラルにしたら互換性がしんどすぎるからAiScript自体の仕様には手を付けずにAiSONとして対応したほうがよさそうだな
- スーパーセットにすることによるメリットがそこまで大きくなさそう
- 現状の仕様でも大抵のJSON5データはAiSONとして読み込めそう
- AiScriptは方向性としては多機能・高機能よりはlight-weightな言語にしたい
という観点から、スーパーセットにしなくても良いのではないかと思ってきています