c# - C# 中的自定义表达式解析器

标签 c# math expression eval finance

我正在为财务应用开发计算器程序。 我需要解析和评估如下所述的复杂财务表达式。

表达式是自定义函数和算术表达式的混合体。 我正在使用 NCalc解决算术表达式。但是,我在解析自定义函数时遇到了问题。

IF((COALESCE(X1,X2)-X3+IF(X4<=0,0,X5))>0, CUSTOM_FUNCTION(X6), X7)

有什么关于最佳方法的建议吗?

我目前正在研究涉及递归调用和堆栈推送/弹出的复杂逻辑。但它不起作用。

最佳答案

这是一个老问题,很久以前就解决了。解决方案是使用解析器生成器,而不是从头开始编写您自己的解析器。有许多可用选项,其中一个比较受欢迎的选项是 ANTLR .

使用像 ANTLR 这样的解析器生成器,您可以使用易于理解的方式描述您的问题 EBNF -like 生产规则。解析器生成器将生成复杂的逻辑,看起来你现在正试图用你选择的语言手写,在你的例子中是 C#。可能您的语言的语法已经以这种格式提供,或者您已经使用这种格式向您的用户和您的开发团队描述该语言。

关于c# - C# 中的自定义表达式解析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32163289/

相关文章:

c# - ASP.NET 中的日历控件

c# - 当应用程序以 xsession 启动时如何全屏显示 GTK# 窗口?

algorithm - 当您有先前的答案时,更快的计算模数的方法?

java - 使用 BigInteger 计算地球的质量

regex - 如何将 perl 正则表达式替换编写为表达式中的函数?

c# - 为了清楚起见,从函数返回枚举而不是 bool 值?

c# - NLog 有时不写入文件

c - C 如何计算 sin() 和其他数学函数?

mysql - 在 MySQL 中使用 REGEXP 选择列

parsing - 处理框架以从脚本调用不同类型的函数的 C++ 方式是什么?