我有一个字符串格式的布尔表达式,例如:
name := "Fred"
type := "Person"
我想将此表达式评估为true或false。
exp := "(name == Fred) && (type == Person)"
最终,我希望能够执行条件语句,例如:
if (exp) {
...
}
然而,从研究来看,这不是Go支持开箱即用的东西。我已经看到了使用AST进行解析和评估的建议。但是,我相当新,特别是AST,因此不知道如何去做。有人可以就如何评估字符串布尔表达式提供任何指导吗?我没有遇到任何完全支持这个的软件包。
答案 0 :(得分:1)
以下是理论上的 。但是,如果您使用Go语法,那么您可以使用Go语法,那么您可以使用Go的解析器和AST。我没有看到任何可以在运行时评估Go AST的代码。但你可能会写一个支持你想要的部分。然后你有一个Go解释器。
以下是支持任何随机表达式语法所需执行的操作:
你想要lex and parse。在内存中构建AST (Abstract Syntax Tree)。然后评估它。
您的树节点可能是(我的Go语法对此有误):
Scope {Tree {
Assignment { Symbol: "name", Symbol: "_literal_1" }
Assignment { Symbol: "exp", Value: Tree: {
AndOperation { Tree{...}, Tree{...} }
}
}
等
然后你的程序可以直接遍历你的AST,或者你可以把它写成字节码形式,但是如果你想让它更小并且以后容易缓存,那么它真的很有用。