こんにちは、数式で不要な括弧を取り除く既知の方法があるかどうか疑問に思っていました。私がこの質問をしている理由は、そのような式の長さを最小限に抑える必要があるからです
if((-if(([V].[6432])=0;0;(([V].[6432])-([V].[6445]))*(((([V].[6443]))/1000*([V].[6448])
+(([V].[6443]))*([V].[6449])+([V].[6450]))*(1-([V].[6446])))))=0;([V].[6428])*
((((([V].[6443]))/1000*([V].[6445])*([V].[6448])+(([V].[6443]))*([V].[6445])*
([V].[6449])+([V].[6445])*([V].[6450])))*(1-([V].[6446])));
これは基本的に sql select ステートメントの一部です。255 文字を超えることはできず、この数式を生成するコードを変更することはできません (基本的にはブラック ボックスです ;)) ご覧のとおり、多くの括弧は役に立ちません。次の事実については言及していません。
((a) * (b)) + (c) = a * b + c
したがって、括弧、乗算/除算、加算/減算の順序を維持したいと考えています。
私は VB で作業していますが、どの言語でも問題なく解決できます。
編集
反対の問題を見つけました (式に括弧を追加します)質問.
これは、重い解析なしで達成できると本当に思っていました。しかし、式を調べて式ツリーに保存するパーサーは避けられないようです。