我有一个应用需要读入并评估源文件中的表达式。到目前为止,我一直在使用muParser来做这件事。但是现在我遇到了一个需要在表达式中使用简单循环支持的情况。我不需要能够从脚本语言或任何其他高级功能调用函数,只需:
使用muParser,我在阅读后解析表达式,根据需要分配变量然后求解:
expr="[0] + [1]*256 - 40"
在上面的例子中,我将[0]和[1]替换为相应的变量,然后可以解决。现在,我需要这样的东西:
expr="for(i=0; i < 10; i+=2) { if(i<=6) { [0] + [i]*256 -40; } }"
我现在所做的就是解析一个字节流。在脚本中,我将字节称为[byte],将位称为[byte] [bit]。有人可以建议一个好的框架/脚本launguage让我做这样的事情吗?
答案 0 :(得分:2)
提升提供精神,但它对你的情况来说复杂而且过度。你可以利用好的muParser(最后一个版本处理三元'if'运算符),用正则表达式解析器抓取循环语法:非常容易编写。让muParser处理每个表达式,并解释变量绑定。你的解析器可能是这样的:
class parse {
parse(const char *expr) {
if (match("for", "(", expr_init, ";" expr_test, ";", expr_after, ")", "{", body, "}"))
for (eval(expr_init); eval(expr_test); eval(expr_after)) { bind_variables and run...}
else
go_old_style...
}
}
答案 1 :(得分:1)
即使你似乎并不需要一个完整的脚本语言,但你已经非常接近它,这可能是获胜的最简单途径。 Lua和Python都非常容易嵌入和调用C(++)程序,Lua比Python稍微容易。