1

私は最近、特定のタスクがあるため、C++ を使用して解析ツリーを掘り下げ始めました。抽象構文ツリーは、ast_parse (boost-library) を使用して生成されます。次に、この ast が解析ツリーに変換されます。ツリーのルートノードを指す shared_ptr があります。ここではすべて正常に動作しますが、問題は次のとおりです。

入力文字列は次のようになります。

NumberOfViews > 3 AND NumberofViews > 3

さらに悪いことに

NumberOfViews > 3 OR not NumberOfViews > 3 

(もちろん、これは常に true と評価され、完全に削除できます)。

そのため、ツリーは非常に大きくなる可能性があるため、ツリーには多くの冗長性があり、論理的な問題さえあります。効率的な方法でツリーを分析し、それらの問題を修正する必要があります (重複した問題を修正することから始めます)。これまでのところ解析ツリーの経験がないため、解決策は必要ありません。

さらに詳しい情報:

パース ツリーは、AND、OR、IN、<=、!= を使用してもう少し複雑にすることができ、特別な関数を呼び出すこともできます。約 5000 文字を使用できます。これらのフィルタは、顧客によって作成されます。ほとんどの場合、既存のフィルターは新しいフィルターにコピーされ、冗長性や非論理的な表現を気にする人はいません。だから私はそれらの虚偽の表現を避けることができません。私の目標は、冗長性がないだけで、同じ解析ツリーを持つことです (既に機能するものがあるため)。パース ツリーは ast から生成されます。最初に ast を最適化することを考えたので、構文木自体を処理する必要はありません。ただし、解析ツリーで重複を検出する方法がわかりません。

4

0 に答える 0