- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我尝试使用 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 作为函数名称(并且有一些关键字看起来也像裸词,例如 true
和 false
)。
改变它需要重写表达式解析器并(可能)根据 Tcl 的内部字节码为该运算符分配一个含义。这不是一件微不足道的事情(代码中有很多地方需要更改),但如果您对要做什么有一个好主意,则有可能。如果你这样做,请与 Tcl 核心团队联系,我们将看看我们能做些什么;您可能会发现我们很容易接受好的建议!
当然,您也可以使用自己的解析器。绝对没有什么能阻止它。
关于c++ - Tcl_ParseExpr 不解析其中包含 'dot' 的表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33399746/
所以我尝试使用 Tcl_ParseExpr 解析表达式: // Any syntax errors? Tcl_Interp *myInterpBuild; Tcl_Parse parseInf
我是一名优秀的程序员,十分优秀!