评估字符串中的布尔表达式 - Go

时间:2016-07-28 19:29:02

标签: string go boolean

我有一个字符串格式的布尔表达式,例如:

name := "Fred"

type := "Person"

我想将此表达式评估为true或false。

exp := "(name == Fred) && (type == Person)"

最终,我希望能够执行条件语句,例如:

if (exp) {
    ...
}

然而,从研究来看,这不是Go支持开箱即用的东西。我已经看到了使用AST进行解析和评估的建议。但是,我相当新,特别是AST,因此不知道如何去做。有人可以就如何评估字符串布尔表达式提供任何指导吗?我没有遇到任何完全支持这个的软件包。

1 个答案:

答案 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,或者你可以把它写成字节码形式,但是如果你想让它更小并且以后容易缓存,那么它真的很有用。

相关问题