1

我见过很多表达式解析器/标记器,它们可以采用某个字符串并评估结果。例如,您可以抽出字符串:

4+4

进入以下代码:

MSScriptControl.ScriptControl sc = new MSScriptControl.ScriptControl();
//' You always need to initialize a language engine
sc.Language = "VBScript";
//' this is the expression - in a real program it will probably be
//' read from a textbox control 
string  expr  = "4+4";
double res  = sc.Eval(expr);

并得到 8。但是,是否有可以评估字符串的解析工具:

4 = 4 = 4

? 到目前为止,所有示例都因无法比较 double 和 boolean 的错误而失败(从编译器的角度来看这是有道理的,但从人类的角度来看,我们可以看到这是真的)。有人遇到可以实现这一目标的东西吗?

4

3 回答 3

2

从人类的角度来看,只有当我们将 x = y = z 视为特殊运算符(具有三个操作数)时,这才是正确的,其中它意味着 x = y、y = z、x = z。这是表达式的特定句法解释。人类(尤其是程序员)也可以像大多数编译器一样解释它,即选择最左边的分组(x = y),然后将该比较的结果(布尔值)与 z 进行比较。即使对人类来说,在这种语法下这也没有意义。从人类的角度来看,这似乎很明显,因为在选择对给定上下文“有意义”的语法时,人类是出了名的模糊。

如果您真的想要那种级别的“模糊性”,则需要研究Wolfram Alpha之类的东西,它会执行上下文分析以尝试找到表达式含义的最佳猜测。如果您在此处输入“4 = 4 = 4”,它将回复 True。

于 2012-08-29T21:11:34.340 回答
1

您需要为您的“语言”定义语法并构建解析器,因为您的预期行为不受正常表达式语法的覆盖(并且正常语言也应该将其评估为“假”,因为我听说过的每种语言都将 = 作为二进制操作,因此将在某些时候以“4 = true”结束)。有一些工具可以为 C# 构建解析器...

旁注:匹配“人类视角”是非常困难的问题,即使是人与人之间的交流也没有解决:)。

于 2012-08-29T21:12:33.443 回答
0

尝试

var result = (int) HtmlPage.Window.Eval("4 + 4");
于 2012-08-29T21:06:25.937 回答