【发布时间】:2015-09-22 21:00:11
【问题描述】:
我有一组传入记录,需要在一组定义和存储的逻辑子句下进行评估。一个示例逻辑子句如下:
Acct1 != 'Y' AND Acct2 > 1004 AND Acct3 >= 96 AND Acct4 < 1004 AND Acct5 = 99 AND ((Acct6 <= 9090 OR Acct7 IN (A1,A2,A6) AND Acct1 NOT IN (A3,A4)) AND Formatted LIKE 'LINUX' AND Acct9 NOT LIKE 'WINDOWS' AND (Acct10 = 'N' AND NOT Acct11 = 'N') AND EditableField BETWEEN (10 AND 20) )
我对子句的数据输入如下:
map.put(Acct1,"Y")
map.put(Acct2,1010)
map.put(Acct3,99)
map.put(Acct4,1015)
map.put(Acct5,99)
map.put(Acct6,9090)
map.put(Acct7,"A3")
map.put(Formatted,"LINUX_INST")
map.put(Updated,"LINUX_TMP")
map.put(Acct10,"Y")
map.put(Acct11,"N")
map.put(EditableFIeld,25)
我必须根据上面定义的子句评估填充到映射中的传入记录,并根据评估结果打印 true 或 false。
子句条件和映射值也将被更改和执行。
我有以下条件子句要评估:
!=
>
>=
<
=
<=
IN(
NOT IN(
LIKE(
NOT LIKE(
BETWEEN(
AND
OR
AND NOT
OR NOT
我曾尝试使用语法生成器,但有人告诉我这不是我们应用程序的推荐解决方案,因此我正在寻找 java 代码,我有这个详细的示例供参考 AND、OR、=。 resolving logical operations - AND, OR, looping conditions dynamically 并在可能的情况下寻找 sn-ps 以在此基础上进行构建。
【问题讨论】:
-
你做了什么,什么没用?
-
我尝试过使用语法生成器,因为我无法在 java 中编写如此复杂的运算符,但由于技术限制,这不被接受。因此,如果可用于评估 java 中的条件,则寻找 sn-ps。
-
您知道哪些约束使解析器生成器不适合您的情况吗?一些解析器生成器生成没有标准库的纯代码,并且通常被调整为在速度和存储方面非常有效。如果解析器生成器不可行,了解原因可能有助于避免编写由于相同原因而无法执行的详细答案。
-
@JeffBowman 如果它是纯 Java 代码,那么它没有问题。如果它派生第三方库(不推荐用于某些应用),则会出现问题。
-
您可以轻松编写一个递归下降解析器来评估(逻辑)表达式。见stackoverflow.com/a/2336769/120163
标签: java algorithm parsing logical-operators recursive-descent