3

我有一个包含多行条件字符串的文件,我需要读取该文件并将逻辑条件字符串转换为实际代码。有几个参数,条件的每一行检查一个或多个参数是否满足指定值或包含指定值。例如:

$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 的所有细节之前,我只想检查一下是否还有其他好的想法。非常感谢您的帮助!

4

2 回答 2

0

实际上我不知道现有库是否这样做,但评估表达式的经典方法是分两步完成:

您拥有的表达式是中缀表示法,因此您需要将其转换为前缀表示法,这是删除括号并将运算符放在操作数前面。

在第二步中,您使用一个简单的递归算法来评估表达式,该算法反过来也将负责解析变量。

还有一件事,你应该给赋值运算符最高优先级。

我编写了一个表达式评估器的开源实现:也许您可以扩展它以满足您的需求。

jDTO 表达式评估器源

希望这可以帮助。

于 2012-05-08T19:50:17.583 回答
0

对于非常简单的语言(例如布尔表达式),像 ANTLR 之类的工具可以工作,但确实有点矫枉过正。您可以很容易地手动编写解析器。请参阅我关于手动编写递归下降解析器的SO答案。

于 2012-05-08T20:05:37.383 回答