gpt4 book ai didi

c++ - Tcl_ParseExpr 不解析其中包含 'dot' 的表达式

转载 作者:行者123 更新时间:2023-11-30 02:35:40 29 4
gpt4 key购买 nike

所以我尝试使用 Tcl_ParseExpr 解析表达式:

    // Any syntax errors?
Tcl_Interp *myInterpBuild;
Tcl_Parse parseInfo;
std::string expression = "(test1==1) ? 0.0) : (test2.hello+1.0)";

if (Tcl_ParseExpr(myInterpBuild,expression.c_str(),-1,&parseInfo)
== TCL_ERROR)
{
std::string failMsg = Tcl_GetStringResult(myInterpBuild);
std::cout << failMsg;

现在,通常这是可行的,不会出现错误。但是,如果表达式包含一个 . (点符号)然后它只解析表达式中点以上的部分。

例如,如果我将表达式设置为 '(test1==1) ? 0.0) : (test2.hello+1.0)' 然后只有 'test2' 被解析并且 'hello' 被丢弃。

上面的输出是:

invalid bareword "test2"

它似乎只对不包括点字符的表达式求值。

有谁知道为什么会这样以及我必须做些什么来解决这个问题?

最佳答案

. 字符目前不是 Tcl 表达式语言中的运算符。当然,它可以在浮点字面量中使用,但作为运算符,它根本不是语法规则的合法部分。因此,Tcl 的解析器在遇到它时会停止并抛出错误:如果将它输入 Tcl expr 命令,它会做完全相同的事情。更重要的是,Tcl 的表达式语言目前不支持裸词 except 作为函数名称(并且有一些关键字看起来也像裸词,例如 truefalse )。

改变它需要重写表达式解析器并(可能)根据 Tcl 的内部字节码为该运算符分配一个含义。这不是一件微不足道的事情(代码中有很多地方需要更改),但如果您对要做什么有一个好主意,则有可能。如果你这样做,请与 Tcl 核心团队联系,我们将看看我们能做些什么;您可能会发现我们很容易接受好的建议!

当然,您也可以使用自己的解析器。绝对没有什么能阻止它。

关于c++ - Tcl_ParseExpr 不解析其中包含 'dot' 的表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33399746/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com