r-koubou/KSPSyntaxParser

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

r-koubou opened this issue · 3 comments

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から各種フェーズの処理を根本的に見直さなければならない

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

Work in progress

Fixed. Now in Beta phase. See also

Done. Apply to vsce 0.4.0