BUG - Variable initializer expression (using with brackets)
Closed this issue · 2 comments
r-koubou commented
Sorry, written in Japanese and this bug is very difficult to solve..
本来KSPの言語仕様上問題がないが、以下の場合、初期化処理で誤検出をする
EXPECT/期待する動作
declare $num := ( 2 * 3 ) + 1 {OK}
NOW/現状
declare $num := (2 * 3 ) + 1 {NG:Syntax Error}
Workaround/回避方法
代入式の最初で括弧を使わない方法を検討してください。
declare $num := 7
or
declare $num := 2 * 3 + 1
Cause/原因
最初の式の括弧が【配列初期化子】なのか、【数学的な意味での括弧】なのかの判別が出来ない
declare $num := (2 * 3 ) + 1
{ この場合、(2*3)が配列初期化として誤検出されてしまう }
eBNFで初期化式を厳密に定義出来ていないため、構文解析フェーズでエラーになる。
強引にASTで表現すると、以下のようになる。KSPの仕様から逸脱した、支離滅裂な状況である。
< := >
+
|
< + >
|
+------------+-----------+
| |
<Array Initializer> 1
|
+
< * > index[ 0 ]
+
|
+--------+
| |
2 3
Why difficult to solve / 修正困難な理由
最初の式の括弧が配列初期化子なのか、数学的な意味での括弧なのかの判別が出来ない。
解決するには、eBNFを書き直し、各種フェーズの処理を根本的に見直さなければならない
修正に伴う影響範囲を考えると、長時間の時間確保が必要であると考えている。
r-koubou commented
WIP: temporary fixes / 仮対応版
r-koubou commented
Done. Apply to vsce 0.4.0