问题标签 [evaluator]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
1673 浏览

c# - 如何允许用户在 C# 应用程序中定义财务公式

我需要让我的用户能够定义将根据数据计算值的公式。例如

我将需要允许 / * + - 操作,还需要分配局部变量并执行 IF 语句,就像这样

场景很复杂,因为我有以下结构..

  1. 客户(几百)
  2. 配置(每位客户约10个)
  3. 项目(每个客户配置约 10,000 个)

所以我将执行一个 3 级循环。在每个“配置”级别,我将启动一个数据库事务并编译论坛,每个“项目”将使用相同的事务 + 编译公式(每个配置大约有 20 个公式,每个项目将使用所有公式)。

这使事情变得更加复杂,因为我不能只使用编译器服务,因为它会导致内存使用量持续增长。我不能为每个“配置”循环级别使用一个新的 AppDomain,因为我需要传递的一些引用无法编组。

有什么建议么?

--更新--这就是我的选择,谢谢! http://www.codeproject.com/Articles/53611/Embedding-IronPython-in-aC-Application

0 投票
3 回答
1562 浏览

haskell - Haskell中的相互递归评估器

更新:我添加了一个描述我最终解决方案的答案(提示:单一Expr数据类型是不够的)。


我正在为一种小表达式语言编写一个评估器,但我被困在这个LetRec结构上。

这是语言:

到目前为止,这是评估员:

这是我要评估的测试功能:


编辑:

根据 Travis 的回答和 Luke 的评论,我更新了我的代码以将 MonadFix 实例用于 Error monad。前面的示例现在可以正常工作了!但是,下面的示例无法正常工作:

评估时,评估器循环,没有任何反应。我猜我在这里做了一些过于严格的事情,但我不确定它是什么。我是否违反了 MonadFix 法律之一?

0 投票
2 回答
2737 浏览

java - Java 字符串和数学表达式求值器

我们目前使用 Jeks 解析器来评估表达式。我看不到用它评估字符串表达式的方法 - 例如:

如果(“测试 1”=“测试 2”)

有什么东西可以评估 Java 中的字符串和数学表达式吗?最好是免费或开源的。

谢谢你的帮助,

安德斯

0 投票
1 回答
426 浏览

boost - 函数对象内部的内部调用,(Boost::apply_visitor 特定)

我目前正在写一个set expression evaluator,它生成set<T>和set<set<T>>,下面的代码是显示表达式的结果。

当我尝试使用集合代码评估集合集时,我遇到的问题正在发生,显然我正在使用它,因为这是一种很好的做法,但编译器似乎不喜欢我用来构造调用的语法。

有两条这样的线,它们产生痕迹..

e:\documents\level 3\advanced software engineering\coursework\coursework\boost\variant\detail\apply_visitor_unary.hpp(76) : error C2039: 'apply_visitor' : is not a member of 'std::set<_Kty>' 1> with 1> [ 1> _Kty=std::string 1> ] 1> e:\documents\level 3\advanced software engineering\coursework\coursework\context.h(96) :见参考函数模板实例化'std ::basic_string<_Elem,_Traits,_Ax> boost::apply_visitor::ExpressionTree::string_visitor,const std::set<_Kty>>(const Visitor &,Visitable &)' 正在编译 1> 和 1> [ 1> _Elem =char, 1> _Traits=std::char_traits, 1> _Ax=std::allocator, 1> T=std::string, 1> _Kty=std::string, 1> Visitor=Context::ExpressionTree::string_visitor, 1> Visitable=const std::set 1> ] 1> e:\documents\level 3\advanced software engineering\coursework\coursework\context.h(90) : 在编译类模板成员函数 'std::string Context::ExpressionTree::string_visitor::operator ()(std::set<_Kty>) const' 1> with 1> [ 1> T=std::string, 1> _Kty=std::set 1> ] 1> e:\documents\level 3\advanced software engineering\coursework\coursework\context.cpp(337) : 参见类模板实例化 'Context::ExpressionTree::string_visitor ' 正在编译 1> 与 1> [ 1> T=std::string 1> ]ExpressionTree::string_visitor, 1> Visitable=const std::set 1> ] 1> e:\documents\level 3\advanced software engineering\coursework\coursework\context.h(90) : 在编译类模板成员函数'std ::string Context::ExpressionTree::string_visitor::operator ()(std::set<_Kty>) const' 1> with 1> [ 1> T=std::string, 1> _Kty=std::set 1 > ] 1> e:\documents\level 3\advanced software engineering\coursework\coursework\context.cpp(337) : 参见类模板实例化 'Context::ExpressionTree::string_visitor' 正在编译 1> 和 1> [ 1> T=std::字符串 1> ]ExpressionTree::string_visitor, 1> Visitable=const std::set 1> ] 1> e:\documents\level 3\advanced software engineering\coursework\coursework\context.h(90) : 在编译类模板成员函数'std ::string Context::ExpressionTree::string_visitor::operator ()(std::set<_Kty>) const' 1> with 1> [ 1> T=std::string, 1> _Kty=std::set 1 > ] 1> e:\documents\level 3\advanced software engineering\coursework\coursework\context.cpp(337) : 参见类模板实例化 'Context::ExpressionTree::string_visitor' 正在编译 1> 和 1> [ 1> T=std::字符串 1> ]] 1> e:\documents\level 3\advanced software engineering\coursework\coursework\context.h(90) : 在编译类模板成员函数'std::string Context::ExpressionTree::string_visitor::operator ()( std::set<_Kty>) const' 1> with 1> [ 1> T=std::string, 1> _Kty=std::set 1> ] 1> e:\documents\level 3\advanced software engineering\ coursework\coursework\context.cpp(337) :请参阅对类模板实例化 'Context::ExpressionTree::string_visitor' 的引用 1> 编译 1> [ 1> T=std::string 1> ]] 1> e:\documents\level 3\advanced software engineering\coursework\coursework\context.h(90) : 在编译类模板成员函数'std::string Context::ExpressionTree::string_visitor::operator ()( std::set<_Kty>) const' 1> with 1> [ 1> T=std::string, 1> _Kty=std::set 1> ] 1> e:\documents\level 3\advanced software engineering\ coursework\coursework\context.cpp(337) :请参阅对类模板实例化 'Context::ExpressionTree::string_visitor' 的引用 1> 编译 1> [ 1> T=std::string 1> ]字符串 Context::ExpressionTree::string_visitor::operator ()(std::set<_Kty>) const' 1> with 1> [ 1> T=std::string, 1> _Kty=std::set 1> ] 1> e:\documents\level 3\advanced software engineering\coursework\coursework\context.cpp(337) : 请参阅正在编译的类模板实例化 'Context::ExpressionTree::string_visitor' 1> 与 1> [ 1> T=std::string 1> ]字符串 Context::ExpressionTree::string_visitor::operator ()(std::set<_Kty>) const' 1> with 1> [ 1> T=std::string, 1> _Kty=std::set 1> ] 1> e:\documents\level 3\advanced software engineering\coursework\coursework\context.cpp(337) : 请参阅正在编译的类模板实例化 'Context::ExpressionTree::string_visitor' 1> 与 1> [ 1> T=std::string 1> ]请参阅对类模板实例化 'Context::ExpressionTree::string_visitor' 的引用 1> with 1> [ 1> T=std::string 1> ]请参阅对类模板实例化 'Context::ExpressionTree::string_visitor' 的引用 1> with 1> [ 1> T=std::string 1> ]

有谁知道如何表达这种呼叫?

干杯,亚历克斯

0 投票
2 回答
287 浏览

performance - 最佳绩效评估者 f#

我已经实现了一些功能的天真的评估器。我刚刚进入 f# 的世界,所以它会问你是否存在(如果是,如何实现)更快的评估器。我必须得到一个包含 (variableName, (condition + newVariableName)) 的数据结构。这两个字段是字符串。以下是我的评估器版本的一部分:

编辑:此评估器用于验证布尔条件。在此版本中,只有一个 Dictionary 并且性能更高,但是我如何模拟以下情况:

  1. var1 == "foo1" && var1=="foo2" ---> 可满足:假
  2. var2>=0 && var2>0 ---> 可满足:真
  3. (var3 == "foo2" && var3 != null) || var3 == "foo1" --> 可满足:真
0 投票
3 回答
1340 浏览

functional-programming - 在 SECD 机器中,“说唱”是如何工作的?

我正在根据 Wikipedia 上的描述用 C#编写SECD 机器的模拟器。我已经完成了基本操作,但我不确定如何执行指令。rap

在维基百科它说rap

rap 和 ap 一样工作,只是它用当前环境替换了一个虚拟环境的出现,从而使递归函数成为可能

它说ap

ap 从堆栈中弹出一个闭包和参数值列表。闭包通过将其环境安装为当前环境,将参数列表推到其前面,清除堆栈并将 C 设置为闭包的函数指针来应用于参数。S、E 的前一个值和 C 的下一个值保存在转储中。

这是我的实现ap

请注意,这List是我对 Lisp 样式“cons”单元格的实现。

让我感到困惑的是究竟有什么rap不同ap?例如,环境寄存器 (E) 究竟发生了什么?我发现 Wikipedia 的定义有点模棱两可,并且找不到任何其他可以很好地解释它的东西。

0 投票
2 回答
214 浏览

lua - 我可以在评估器模式下运行 Lua 解释器吗?

许多脚本解释器喜欢irbnode充当评估者。如果我执行这段代码,

它将评估并打印值本身,并且不会出错。

当我安装lua它时,它作为执行者而不是评估者工作。所以当我放 时10,它会出错。

我可以让 Lua 解释器作为评估器工作吗?

0 投票
1 回答
391 浏览

c++ - 使用 g++ 编译给定代码的程序

我试图弄清楚如何制作一个使用 g++ 编译书面代码的程序,并测试它是否与示例一起运行良好。程序中将有一个文本框,您可以在其中输入代码(解决方案)。假设练习是编写一个计算两个数字之和的程序。

该程序要做的是制作一个包含给定代码的example.cpp文件(我熟悉该部分)并使用g ++编译example.cpp。当它编译程序时,必须以某种方式在编译程序中输入示例并测试结果是否正确。例如,测试编号是 4 和 5,结果必须是 9。(这些测试编号可以存储在 .txt 文件或类似文件中)。

使用此程序编译 example.cpp,但如何运行和测试它。

有任何想法吗?谢谢!:)

编辑:我能够运行它并在其中输入测试编号,剩下的唯一事情就是测试输出是否正确。

0 投票
1 回答
909 浏览

winforms - 用于接收日志块的 Log4net SmtpAppender 配置

我想将所有内容保存在日志文件中,并接收每封邮件包含 512 条消息的邮件。

RollingFileAppender 工作正常。但是在电子邮件中,我有时会收到 1 封邮件,有时会收到 4 封邮件(不是同一条)。

我也试过 MemoryAppender。我还有 1-2 条消息在队列中,仅此而已。

我尝试了“有损” SmtpAppender,结果是一样的。我应该改变什么?

我的配置在这里

0 投票
2 回答
6396 浏览

session - 骡子 3.2。如何评估流中的空会话变量?

如何在此 CHOICE 中检查我的会话变量是否为空或为空,它对我不起作用。

我也试过 != '' 和 != null