问题标签 [expression-evaluation]

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 投票
1 回答
2507 浏览

programming-languages - 使用 EBNF 描述运算符优先级

我已经为我计划在以后的项目中使用的预处理器语言编写了标记器和表达式评估器。我开始想也许我应该用 EBNF(扩展巴科斯-瑙尔形式)来描述这种语言,以保持语法更易于维护,甚至用它来生成更高版本的解析器。

我的第一印象是 EBNF 用于标记化过程和语法验证。后来我发现它也可以用来描述运算符优先级,就像在这篇文章维基百科文章中一样:

我可以看到这如何允许生成器生成内置运算符优先级的代码,但这真的应该如何表达优先级吗?运算符优先级不是更多关于语义,EBNF 更多关于语法吗?如果我决定在 EBNF 中编写我的语言描述,我应该在考虑运算符优先级的情况下编写它还是将其记录在单独的部分中?

0 投票
4 回答
5020 浏览

java - C++ and PHP vs C# and Java - unequal results

I found something a little strange in C# and Java. Let's look at this C++ code:

In a console you will see X = 11 (Look at the result here - IdeOne C++).

Now let's look at the same code on C#:

In a console you will see 1 (not 11!) (look at the result here - IdeOne C# I know what you thinking now - "How that is possible?", but let's go to the following code.

Java code:

Result the same as in C# (X = 1, look at the result here).

And for the last time let's look at the PHP code:

Result is 11 (look at the result here).

I have a little theory - these languages (C# and Java) are making a local copy of static variable X on the stack (are they ignoring the static keyword?). And that is reason why result in those languages is 1.

Is somebody here, who have other versions?

0 投票
1 回答
51 浏览

c++ - 双打和 oStringStream 的奇怪行为

所以我正在开发一个表达式评估器,作为与工作相关的项目的内部组件。但是当涉及到浮点数学的输出时,我有一些奇怪的行为......

评估者接受一个字符串

看起来好像任何高于 e+004 科学记数法的浮点数都被四舍五入到最接近的整数。谁能解释为什么会发生这种情况以及我如何克服这个问题。

0 投票
1 回答
62 浏览

java - 模式评估器

我有一些字符串需要按照以下模式进行评估 -

上面提到的输入具有相同的模式,其中 '()' 或 null 表示为 ' * '。输出被保存到 int/string 数组,因此输出形式是这样的。

请建议一种方法来评估这种模式的输出形式。

0 投票
0 回答
185 浏览

c# - 如何避免在 C# 中多次加载程序集?

我在 C# 中有一个表达式评估器项目,它生成 IL 并将 IL 转换为评估方法。问题是,没有办法从 C# 中卸载程序集,并且每次我调用表达式评估时,编译器都会继续将程序集添加到当前应用程序上下文中。为了避免这种情况,我可以做的一件事是创建一个 appdomain,在 appdomain 中生成 IL,并在生成 IL 后终止 appdomain。

这是执行此操作的示例代码。有人可以告诉我处理多个程序集加载问题的有效方法吗?

DynamicMethodState 方法状态;

0 投票
0 回答
554 浏览

c# - NCalc 在自定义函数名称中使用符号

假设在我的表达式输入中,我喜欢使用特殊前缀使函数脱颖而出,例如$

我会在其中为$proper和编写自定义函数$upper

但是,我收到控制台错误“在字符'$' 处没有可行的替代方案”。如果我去掉符号或使用下划线,它会起作用。

有没有办法在NCalc的函数名中使用符号字符?当函数以数字开头时,这也不起作用(例如,如果我想将函数名称简写double2x)。

(有点类似于NCalc 评估错误在输入 ',' 处没有可行的替代方案

0 投票
1 回答
65 浏览

stored-procedures - 使用用户定义的程序制作评估器

所以我正在使用 DrRacket 并且因为我正在#lang scribble为我的程序制作手册,所以我想将我的程序运行的实际示例放在使用@interactions到目前为止,我已经得到了这一部分:

当我这样做时

然后我scribble --htmls ++main-xref-in manual.scrbl正确运行它呈现为:

有没有办法使用我所有的定义(在不同的文件中)来使用 scribble 进行评估?我尝试将第 7 行更改为:

但是当我尝试渲染它时,它会抛出这样的东西:

我不想在make-evaluator零件中复制粘贴我的定义(它们很多!)有什么解决办法吗?谢谢敲诈者!

0 投票
1 回答
391 浏览

r - R中复合表达式的返回值是多少?

在 R 中,我可以这样做:

或者,如果您愿意:

也许并不奇怪,这两个(复合)表达式的计算结果都是 6。

这是 R 语言的一个(记录在案的)特性,即复合表达式的值等于复合表达式中的最后一个评估语句吗?

官方文档对此主题很轻: http: //cran.r-project.org/doc/manuals/r-release/R-lang.html#Compound-expressions

0 投票
1 回答
49 浏览

r - 将评估表达式作为命名 arg 传递给函数 (R) 内的函数

我想扩展一个 data.frame 以包含一个新列并为该列提供一个在函数中传递的动态分配的名称。这是一个简化的示例:

这将向 data.frame 添加一个新列,其变量名称由函数“newColTitle”定义。相反,我想将 newColTitle 评估为“myCustomColTitle”并将其作为此新列的命名标记传递,这样输出 data.fram 包含一个名为“myCustomColTitle”的新列。

这可能吗?也许通过substitute(), deparse(), quote(),eval()paste()。您可以假设我已经阅读了有关此类主题的以下入门书(实际上是好几次):

http://adv-r.had.co.nz/Computing-on-the-language.html

但有些细节并没有完全让我印象深刻。

谢谢

0 投票
1 回答
141 浏览

haskell - 更改 Haskell 中每个函数调用的表达式求值顺序

假设我有以下程序:

这只是一个简单的例子,但我认为足以用于演示目的。我怎么能在每次新的(递归)调用foo时改变l1l2中表达式的求值顺序?我知道它们在表达式内部被评估为惰性(在这种情况下是在运算符中的表达式),而不是在声明它们时,但我需要一种方法,因为可能存在程序进入无限循环的情况。如果这种无限递归发生在第二个求值参数l2上,则没有问题,因为l1总是在*l2之前求值,但如果反过来,即无限地求值l1表达式,则*l2***没有机会评估。因此,如果我可以在每个新的foo函数调用上在 ***l1*l2表达式评估之间进行权衡,问题就会得到解决。寻找一个好的/通用的解决方案。

编辑:忘了说xy或两者都可能是无限的结构(列表),这就是问题所在。