我有一个包含多行条件字符串的文件,我需要读取该文件并将逻辑条件字符串转换为实际代码。有几个参数,条件的每一行检查一个或多个参数是否满足指定值或包含指定值。例如:
$parameterA = "value_1" AND ($parameterB CONTAIN "%value_2%" OR $parameterC = "value_3")
“=”,“AND”和“OR”具有“==”,“&&”和“||”的含义。 “%”是外卡。
将其转换为代码后,它应该如下所示:
if (obj.parameterA == "value_1" && (obj.parameterB.contains("value_2") || obj.parameterC == "value_3"))
return true;
else return false;
其中“obj”是某个类的实例。
我在这里搜索了其他帖子,看来ANTLR可能是一个不错的选择。但是,我没有这方面的经验,也不确定在Java中使用它有多困难。在深入了解ANTLR的所有细节之前,我只是想检查是否还有其他好的想法。非常感谢你的帮助!
答案 0 :(得分:0)
实际上我不知道现有的库是否这样做,但评估表达式的经典方法是分两步:
您拥有的表达式是中缀表示法,因此您需要将其转换为前缀表示法,这是删除括号并将运算符放在操作数前面。
在第二步中,您通过使用简单的递归算法来评估表达式,而递归算法又有责任解析变量。
还有一件事,你应该给赋值运算符赋予最大优先级。
我编写了一个表达式求值程序的开源实现:也许你可以扩展它以满足你的需求。
jDTO Expression evaluator source
希望这有帮助。
答案 1 :(得分:0)
对于非常简单的语言(例如布尔表达式),像ANTLR这样的工具可以工作,但实际上是过度的。您可以非常轻松地手动编写解析器代码。见我的SO answer on hand-coding a recursive descent parser.