2016-08-04 11 views
1

視覚的表現のために解析し、グループ/表現に分割する必要がある長い条件文を持つ文字列を持っています。 OR視覚的表現のためのスプリット条件文.net

Group1- - :ここで私は、動的に適切に...

Group1に一緒にこの文字列とグループ式を解析する必要があります...

($ROOT.OPT_CHAR1 IN ('val1') AND $ROOT.OPT_CHAR2 IN ('val2')) OR ($ROOT.OPT_CHAR3 IN ('val3') AND $ROOT.OPT_CHAR4 IN ('val4')) 

ソース文字列の例です。 : - と

$ROOT.OPT_CHAR1 IN ('val1') 

$ROOT.OPT_CHAR2 IN ('val2') 

グループ1-B: - D

$ROOT.OPT_CHAR3 IN ('val3') 

$ROOT.OPT_CHAR4 IN ('val4') 

何か助けていただければ幸いです。

+0

評価には、And/Orだけでなく、左右の括弧も論理式評価を考慮する必要があります。単純な分割やRegexはこのような問題には適していません。パーサを構築する必要があります。 –

+0

合意。私はパーサーを作るロジックに苦労しています。 – ClintRhodes

答えて

0

あなたの式の評価

($ROOT.OPT_CHAR1 IN ('val1') AND $ROOT.OPT_CHAR2 IN ('val2')) OR ($ROOT.OPT_CHAR3 IN ('val3') AND $ROOT.OPT_CHAR4 IN ('val4')) 

だけではなく、アカウントに論理式の評価を取るAND/ORも/表現をグループ化するための右括弧を左にする必要があります。

単純な分割または正規表現は、このような問題には適していません。パーサを構築する必要があります。パーサを構築するには

、あなたの文法を定義することによって開始:トークン、ルール、....

あなたが/構築、あなたの文法をテストし、最終的にC#やJavaのパーサを生成し、箱から抜け出すためにANTLR toolを使用することができます準備ができたパーサー。

ANTLRツールは、入力として文法ファイルを取り、2つのクラスを生成します。レクサーとパーサ

まず、あなたはそれぞれの演算子と括弧のためのトークンを作成します。

LPAREN : '(' ; 
RPAREN : ')' ; 
AND : 'AND'; 
OR : 'OR'; 
IN : 'IN'; 

ROOT.OPT_CHAR1のようなあなたの変数を定義:名前は文字と数字で構成されています

NAME : ('a'..'z' | '0'..'9')*; 

空白を定義します。 WS:( '' | '\ tの' | '\ r' が| '\ n');

最後に、パーサールールを作成します。文法構造の詳細については

、読み: Grammar Structure

があなたのパーサを構築するAntllrヘルプのための簡単なチュートリアルを読みます。

+0

私はANTLRツールが何であるか分かりません。 – ClintRhodes

+0

ANTLRツールは強力なパーサジェネレータです。私の答えでは、文法を構築し、その文法に基づいてテキストファイルを処理できるC#パーサを生成するための参考文献を読んでいます。 SOさんhttp:// stackoverflowを読んでください。com/questions/1931307/antlr-is-there-a-a-simple-example。 –

関連する問題