aiscript icon indicating copy to clipboard operation
aiscript copied to clipboard

仕様書がない

Open marihachi opened this issue 1 year ago • 11 comments

marihachi avatar Oct 01 '23 12:10 marihachi

どのあたりを定義/説明する仕様書があるといいですかね? (個人的にはエラーの一覧があるといいなと思っています。)

FineArchs avatar Oct 01 '23 13:10 FineArchs

構文のルールがまとまったドキュメントはほしいですね...

  • こういう書き方ができる/できない
  • 区切り文字は何が使えるなど
  • その他説明が必要な特殊な仕様など

今後設計から改善する時にたたき台となるようなドキュメントはあると便利そうです。

marihachi avatar Oct 01 '23 13:10 marihachi

逆にエラーの一覧とかはコードを見ればだいたい予想がつくので、優先度は低いかなと思います..

marihachi avatar Oct 01 '23 13:10 marihachi

なるほど、doc/syntax.mdを拡張する感じですかね?

FineArchs avatar Oct 01 '23 13:10 FineArchs

空白周りがだいぶややこしいのでそこを書くか許容するよう変更するかしたいです。 特にif(true) print(0)で構文エラーになるのはほとんどの人が遭遇してるような気がします。

把握してる限りではこんな感じ

空白仕様
// if
if true print(0)
if (true) print(0) // ()外の空白必須
if (true) {print(0)} // ()外の空白必須
// for 括弧無し
for 10 print(0)
for let i 10 print(i)
for let i=2,10 print(i)
// for ()
for(10) print(0)
for(let i 10) print(i)
for(let i=2,10) print(i)
// for {}
for 10 {print(0)} // {前の空白必須
for let i 10 {print(i)} // {前の空白必須
for let i=2,10 {print(i)} // {前の空白必須
// for (){}
for(10){print(0)}
for(let i 10){print(i)}
for(let i=2,10){print(i)}
// each
each let a [] print(0)
each(let a [])print(i)
each let i [] {print(i)} // {前の空白必須
each(let i []){print(i)}
// match
match 1{1 => print(1) 2 => print(2)} // 改行区切りも可
match(1){1 => print(1) 2 => print(2)} // 改行区切りも可
// arr
[10,20,30]
[10 20 30] // 改行区切り可
// obj
{a: 10,b: 20,c: 30} // :後の空白必須
{a: 10 b: 20 c: 30} // :後の空白必須 改行区切りも可
{a: 10;b: 20;c: 30} // :後の空白必須
// etc.
Math:floor(1.5) // :前後の空白不可
:: A { let a = 1 } // A前後の空白必須
eval{print(0)}

salano-ym avatar Oct 01 '23 14:10 salano-ym

if, for, each, matchあたりの書き方はそのうち統一したいですね…

さておき、↑をそのままドキュメントに載せるだけでもかなりマシになりそうな気がします

FineArchs avatar Oct 01 '23 14:10 FineArchs

for文の初期値設定構文に関してはどこにも載ってないですね

for let i=2, 5 { print(i) } // 2 3 4 5 6

salano-ym avatar Oct 01 '23 14:10 salano-ym

今まで実装依存が多かったと思います。 仕様書にまとめることでそれが必要な挙動なのか、議論しやすくなると思います

marihachi avatar Oct 01 '23 23:10 marihachi

https://github.com/syuilo/aiscript/blob/work/improve-syntax-doc/docs/syntax.md

試しに @saki-lere さんの文をsyntax.mdにそのまま組み込んでみたものです。(都合上Math:floorのみA:aに変えています)

FineArchs avatar Oct 02 '23 08:10 FineArchs

仕様書にまとめることでそれが必要な挙動なのか、議論しやすくなると思います

まずどこまでが仕様なのかを定める必要がありますが、

  • 一旦現状の全てを仕様として定義してしまう。問題点は後々仕様変更として対処
  • この場で私たちが新しく仕様を定める。
  • 何案か出してしゅいろさんに選んでもらう
  • しゅいろさんに全部吐かせる のいずれかを選ぶ必要があるように思います。

FineArchs avatar Oct 03 '23 09:10 FineArchs

コンセプトや考え方の上にAiScriptという言語があると思うので、 その辺をある程度は言語化しておきたいところです

機能追加や変更の指標になると思います。

marihachi avatar Oct 05 '23 09:10 marihachi