如何使用自定义逻辑条件解析字符串?

时间:2012-05-08 19:40:06

标签: java string parsing boolean

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

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

2 个答案:

答案 0 :(得分:0)

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

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

在第二步中,您通过使用简单的递归算法来评估表达式,而递归算法又有责任解析变量。

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

我编写了一个表达式求值程序的开源实现:也许你可以扩展它以满足你的需求。

jDTO Expression evaluator source

希望这有帮助。

答案 1 :(得分:0)

对于非常简单的语言(例如布尔表达式),像ANTLR这样的工具可以工作,但实际上是过度的。您可以非常轻松地手动编写解析器代码。见我的SO answer on hand-coding a recursive descent parser.