2016-08-04 30 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-简单的例子。 –