Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

インデント構文の弱点 - バリデーションを強化する #1629

Open
kujirahand opened this issue Mar 4, 2024 · 1 comment
Open
Labels

Comments

@kujirahand
Copy link
Owner

kujirahand commented Mar 4, 2024

インデント構文を使ったとき、正しくないインデント、壊れたインデントがあった時のエラーが分かりづらいです。

そこで、「もし」や「の間」「関数」など、インデント可能な構文かどうかをバリデーションでチェックする機構を入れたいと思います。

  • 「:」の前に、「ならば」「反復」「間」「繰り返す」があるか?
  • 「:」以外の部分でインデント個数(レベル)が変化していないか?
  • もし文で、「違えば」から「ここまで」の個数が対応しているか?

検出が分かりにくい例

以下、エラーになります。

●readyState待ち(videoの):
    変数 max  = videoの要素数
    変数 cnt
    真の間:
        cnt = 0
        videoを反復:
            もし対象["readyState"]>=4ならば:
                cnt = cnt +1
        もしcntがmaxならば:
            抜ける
        0.01秒待つ
    戻る

[1,2,3,4,5]のreadyState待ち
  • [エラー][文法エラー]a.nako3(1行目): 関数『a__readyState待』の定義で以下のエラーがありました。
  • [文法エラー]a.nako3(1行目): 『ここまで』がありません。関数定義の末尾に必要です。

3行目を変数 cnt=0 とすると問題なく実行可能となる。
ただし、対象が[1,2,3,4,5]を返すのだが、対象["readyState"]としていることから、undefinedになり、いつまでも、cntアップされないため、無限ループとなる例。
実際のところ、インデント構文ではなく、変数の問題なのだが、インデント構文のエラーが表示されるのが問題。

@kujirahand
Copy link
Owner Author

@kujirahand kujirahand changed the title インデント構文の弱点 インデント構文の弱点 - バリデーションを強化する Mar 27, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant