相关疑难解决方法(0)

是否有.NET函数可以让我比较两个运算符的优先级?

.NET Framework中是否有一种类型可以比较两个运算符并确定其优先级是否低于另一个运算符?目前,我已经IComparer<ExpressionType>为我感兴趣的运营商实现了一种功能,并使用C#语言的运营商类别图表.

实施是微不足道的,而对于编译器/解释实施者一般使用,导致我认为一般的效用函数存在.或者,如果存在库函数以获得给定运算符的序数,则实现这样的比较器也是微不足道的.

.net expression-trees operator-precedence

8
推荐指数
1
解决办法
236
查看次数

检测BinaryExpression中的括号

我正在构建一个表达式分析器,我想从中生成数据库查询代码,我已经走得很远,但是我很难准确地解析BinaryExpressions.将它们分解为Left和Right非常容易,但我需要检测括号并相应地生成我的代码,我看不到如何执行此操作.

一个例子[请忽略有缺陷的逻辑:)]:

a => a.Line2 != "1" && (a.Line2 == "a" || a.Line2 != "b") && !a.Line1.EndsWith("a")
Run Code Online (Sandbox Code Playgroud)

我需要在中间检测'set'并保留它们的分组但是在解析期间我看不到表达式与正常BinaryExpression的任何差异(我不想检查括号的字符串表示)

任何帮助,将不胜感激.

(我应该提一下,我正在使用C#)

- 编辑 - 我没有提到我使用标准的.Net Expression类来构建表达式(System.Linq.Expressions命名空间)

--Edit2--好的我没有将文本解析为代码,我正在将代码解析为文本.所以我的Parser类有一个这样的方法:

void FilterWith<T>(Expression<Func<T, bool>> filterExpression);
Run Code Online (Sandbox Code Playgroud)

它允许你编写这样的代码:

FilterWith<Customer>(c => c.Name =="asd" && c.Surname == "qwe");
Run Code Online (Sandbox Code Playgroud)

使用标准.Net类很容易解析,我的挑战是解析这个表达式:

FilterWith<Customer>(c => c.Name == "asd" && (c.Surname == "qwe" && c.Status == 1) && !c.Disabled)
Run Code Online (Sandbox Code Playgroud)

我的挑战是将括号内的表达式保持为单个集合..Net类正确地将括号部分与其他部分分开,但由于括号而没有表明它是一个集合.

.net c# expression-trees parentheses

6
推荐指数
1
解决办法
2060
查看次数