Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用于可视化表示的拆分条件语句.net_C#_.net_Vb.net - Fatal编程技术网

C# 用于可视化表示的拆分条件语句.net

C# 用于可视化表示的拆分条件语句.net,c#,.net,vb.net,C#,.net,Vb.net,我有一个带有长条件语句的字符串,我需要对其进行解析并将其拆分为组/表达式以进行可视化表示。下面是源字符串的一个示例 ($ROOT.OPT_CHAR1 IN ('val1') AND $ROOT.OPT_CHAR2 IN ('val2')) OR ($ROOT.OPT_CHAR3 IN ('val3') AND $ROOT.OPT_CHAR4 IN ('val4')) 我需要动态解析这个字符串,并将表达式适当地组合在一起 Group1:-或 第1-A组:-和 $ROOT.OPT_CHAR1 IN

我有一个带有长条件语句的字符串,我需要对其进行解析并将其拆分为组/表达式以进行可视化表示。下面是源字符串的一个示例

($ROOT.OPT_CHAR1 IN ('val1') AND $ROOT.OPT_CHAR2 IN ('val2')) OR ($ROOT.OPT_CHAR3 IN ('val3') AND $ROOT.OPT_CHAR4 IN ('val4'))
我需要动态解析这个字符串,并将表达式适当地组合在一起

Group1:-或

第1-A组:-和

$ROOT.OPT_CHAR1 IN ('val1')

$ROOT.OPT_CHAR2 IN ('val2')
$ROOT.OPT_CHAR3 IN ('val3')

$ROOT.OPT_CHAR4 IN ('val4')
第1-B组:-和

$ROOT.OPT_CHAR1 IN ('val1')

$ROOT.OPT_CHAR2 IN ('val2')
$ROOT.OPT_CHAR3 IN ('val3')

$ROOT.OPT_CHAR4 IN ('val4')

任何帮助都将不胜感激。

对您的表达进行评估

($ROOT.OPT_CHAR1 IN ('val1') AND $ROOT.OPT_CHAR2 IN ('val2')) OR ($ROOT.OPT_CHAR3 IN ('val3') AND $ROOT.OPT_CHAR4 IN ('val4'))
应该考虑逻辑表达式的计算,不仅要考虑和/或,还要考虑表达式分组的左/右括号

简单拆分或正则表达式不适用于此类问题。您必须构建一个解析器

要构建解析器,首先要定义语法:标记、规则等等

您可以使用构建/测试语法,最终生成c#或java解析器,并获得现成的解析器

Antlr工具将语法文件作为输入,并生成两个类:lexer和parser

首先,为每个运算符和括号创建标记:

LPAREN : '(' ;
RPAREN : ')' ;
AND : 'AND';
OR : 'OR';
IN : 'IN';
定义变量,如ROOT.OPT_CHAR1:名称由字母和数字组成:

 NAME : ('a'..'z' | '0'..'9')*;
定义空白: WS:(“|”\t“|”\r“|”\n”)

最后创建解析器规则

有关语法结构的详细信息,请阅读:


阅读Antllr的简单教程可以帮助您构建解析器。

表达式的计算

($ROOT.OPT_CHAR1 IN ('val1') AND $ROOT.OPT_CHAR2 IN ('val2')) OR ($ROOT.OPT_CHAR3 IN ('val3') AND $ROOT.OPT_CHAR4 IN ('val4'))
应该考虑逻辑表达式的计算,不仅要考虑和/或,还要考虑表达式分组的左/右括号

简单拆分或正则表达式不适用于此类问题。您必须构建一个解析器

要构建解析器,首先要定义语法:标记、规则等等

您可以使用构建/测试语法,最终生成c#或java解析器,并获得现成的解析器

Antlr工具将语法文件作为输入,并生成两个类:lexer和parser

首先,为每个运算符和括号创建标记:

LPAREN : '(' ;
RPAREN : ')' ;
AND : 'AND';
OR : 'OR';
IN : 'IN';
定义变量,如ROOT.OPT_CHAR1:名称由字母和数字组成:

 NAME : ('a'..'z' | '0'..'9')*;
定义空白: WS:(“|”\t“|”\r“|”\n”)

最后创建解析器规则

有关语法结构的详细信息,请阅读:


阅读Antllr的简单教程可以帮助您构建解析器。

计算不仅要考虑逻辑表达式的计算和/或,还要考虑左/右括号。简单拆分或正则表达式不适用于此类问题。你必须构建一个解析器。同意。我正在努力解决创建解析器的逻辑问题。求值不仅要考虑逻辑表达式求值和/或,还要考虑左/右括号。简单拆分或正则表达式不适用于此类问题。你必须构建一个解析器。同意。我正在为创建语法分析器的逻辑而挣扎。我不知道ANTLR工具是什么。ANTLR工具是一个强大的语法分析器生成器,请阅读我的答案中的参考以构建语法并生成c#语法分析器,它可以基于该语法处理文本文件。读吧。我不知道ANTLR工具是什么。ANTLR工具是一个强大的解析器生成器,请阅读我的答案中的参考来构建语法并生成c#解析器,它可以基于该语法处理文本文件。读吧。