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

BUG - Operator "&" / 文字列連結演算子 "&" #5

Closed
r-koubou opened this issue Mar 21, 2018 · 3 comments
Closed

BUG - Operator "&" / 文字列連結演算子 "&" #5

r-koubou opened this issue Mar 21, 2018 · 3 comments
Labels
bug (Difficult to Solve) Bug will be fixed. However very take a time to solve. (a few weeks~months or more)
Milestone

Comments

@r-koubou
Copy link
Owner

r-koubou commented Mar 21, 2018

Sorry, written in Japanese and this bug is very difficult to solve..

本来KSPの言語仕様上問題がないが、以下の場合、文字列連結を正しく検知できない

EXPECT/期待する動作

@str := "value: " & 1 + 2 + 3  {OK: @str is "value6" }

NOW/現状

@str := "value: " & 1 + 2 + 3 {NG: 型の不一致として検出している}

Workaround/回避方法

四則演算子部分を明確に括弧で括ってください

@str := "value: " & (1 + 2 + 3) 
{他のプログラミング言語の多くはこのように記述しないと論理的な理由でエラーになります}
{変な癖(?)がついてしまうとKSP以外の言語で苦労します。強要はしませんが、習慣化されることを推奨します}

Cause/原因

&演算子を他の演算子と同等と概念として扱っているため、右項と左項の評価時に方の不一致が発生している。

@str := "Value: " & 1 + 2

この場合、現状ASTでは以下のように扱っている。

               < := >
                 +
                 |
         +-------+------+
         |              |
        @str            |
                      < + >  Left node: String, Right node: Integer
                        |
                +-------+--------+
                |                |
                +                2
              < & >
                +
                |
            +----+----+
            |         |
        "Value: "     1

Why difficult to solve / 修正困難な理由

現状、演算子として扱っているが、KONTAKTの挙動を見ると、暗黙の型変換の実態が不明確である。

KSPの言語仕様的に、&はもはや演算子ではなく、文字列連結命令であると考えている。

(JavaやC#のように+演算子で定義し、括弧で文字列と数値の連結の評価が厳密であるべきはずだったが、NIの継ぎ接ぎの追加でカオスになっていると思われる)

解決するには、eBNFから各種フェーズの処理を根本的に見直さなければならない

修正に伴う影響範囲を考えると、長時間の時間確保が必要であると考えている。

@r-koubou r-koubou added the bug (Difficult to Solve) Bug will be fixed. However very take a time to solve. (a few weeks~months or more) label Mar 21, 2018
@r-koubou r-koubou added this to the vsce-0.4.0 milestone Mar 26, 2018
@r-koubou
Copy link
Owner Author

Work in progress

@r-koubou
Copy link
Owner Author

Fixed. Now in Beta phase. See also

@r-koubou
Copy link
Owner Author

r-koubou commented Mar 31, 2018

Done. Apply to vsce 0.4.0

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug (Difficult to Solve) Bug will be fixed. However very take a time to solve. (a few weeks~months or more)
Projects
None yet
Development

No branches or pull requests

1 participant