kujirahand / nadesiko3

Japanese Programming Language Nadesiko v3 (JavaScript/TypeScript)
https://nadesi.com/
MIT License
240 stars 19 forks source link

ハッシュリテラルのキーと"{}"展開の際のエラーのメッセージについて #1649

Open weyk opened 5 months ago

weyk commented 5 months ago

以下、2つのコンボによりエラー原因の特定に時間がかかったのでなにか 良い対策かエラーメッセージの変更があれば。 ・ハッシュリテラル(オブジェクトリテラル)のキーが関数名(命令)と同じ時は""等が必要。  (命令と同じだとtypeがfuncになる。lexerでfunc,":",calcという列はハッシュリテラル中に許可されない。   キーを明示的に""することでstring,":",calcとなりハッシュリテラルの一分になる) ・"{}"の展開エラー({}不一致)の際に実際の処理しようとした文字列が不明。

ある程度長いハッシュリテラルを記述した際に、 ・最初はキーに""なしで記述。 →"}"で閉じられてないということでエラー。 ソースにコンソールログを埋め込むとlexerがfunc,":",calcという並びがハッシュリテラル中にacceptに無いことでエラー。 終了というキーがwordからfuncに変換されていたのが原因。wordではなく明示的に""にしてstringにて対応。 ・全キーを""でくくった・・つもりだったものの、1箇所閉じ忘れた。 →キーや値の""の外と内が反転したまま解析が進み、"KEY":「{hoge["xx"]}」という部分でエラーとなった。 ソースにコンソールログを埋め込むと、":「{hoge["という文字列が{}展開に失敗していることが分かり、""の不一致が原因と判明。 その10行ぐらい上にあったキーの""の閉じ漏れを発見してやっと解決。

ハッシュキーの位置のfuncはwordからの過剰変換として考えてwordに差し戻しても良いかも(func,":",calcをacceptする)