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

use*_*439 4 c# math expression finance eval

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

该表达式是自定义函数和算术表达式的混合。我用来NCalc解析算术表达式。但是,我在解决自定义函数时遇到了麻烦。

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

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

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

Mis*_*hax 5

这是一个很久以前就解决的老问题了。解决方案是使用解析器生成器,而不是从头开始编写自己的解析器。有很多选项可用,其中最流行的选项之一是ANTLR

使用像 ANTLR 这样的解析器生成器,您可以使用易于理解的类似EBNF的产生规则来描述您的问题。解析器生成器将生成复杂的逻辑,看起来您现在正在尝试用您选择的语言(在您的情况下是 C#)手动编写。您的语言的语法可能已经以这种格式提供,或者您已经使用这种格式向您的用户和开发团队描述该语言。