2016-08-04 40 views
1

我有一個字符串與一個長的條件語句,我需要解析並分成組/表達式的可視化表示。這裏是源字符串的例子...爲視覺表示分割條件語句.net

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

我需要適當地動態地解析這個字符串和表達式進行分組在一起......

組別1 - OR

Group1-答: - 和

$ROOT.OPT_CHAR1 IN ('val1') 

$ROOT.OPT_CHAR2 IN ('val2') 

組別1-B: - AN D

$ROOT.OPT_CHAR3 IN ('val3') 

$ROOT.OPT_CHAR4 IN ('val4') 

任何幫助,將不勝感激。

+0

評估應該考慮到邏輯表達式評估不僅僅是和/或還有左/右括號。簡單的分裂或正則表達式不適合這樣的問題。你必須建立一個解析器。 –

+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也留下了分組表達式/右括號。

簡單拆分或正則表達式不適合這樣的問題。你必須建立一個解析器。

要建立一個分析器,通過定義你的語法開始:令牌,規則,....

您可以使用ANTLR tool構建/測試你的語法,最後生成C#或Java解析器和擺脫箱現成的解析器。

ANTLR的工具將語法文件作爲輸入,並生成兩個類:詞法和語法分析器

首先,您爲每個運營商和括號標記:

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 http:// stackoverflow。COM /問題/ 1931307/ANTLR - 是 - 有-A-簡單的例子。 –