0

我有这种格式的规则:

Condition -> Condition OPERATOR Condition | Condition 
Condition -> attribute OPERATOR 
value OPERATOR -> EQUALS | STARTS WITH | ENDS WITH | AND | OR | NOT EQUALS | CONTAINS 

我需要为给定的规则创建一个 JAVA POJO(setters/getters)。我该怎么做?

是否应该创建任何外部解析器工具。我能够为 OPERATOR 部分创建:

//POJO CLASS
Class Condtion{
    private String attr;
    private String op;
    private String value;

    public String getAttr(){
        this.attr=attr;
    } 

    public String getOp(){
        this.op=op;
    }

    public String getValue(){
        this.value=value;
    }

    //setters for above three 
}

如何为规则创建 POJO Condition->Condition OPERATOR Condition | Condition

4

1 回答 1

1

您似乎拥有一种具有特定语法的规则语言,并且您希望将语法中表达的规则表示为 Java 对象。

通常,您需要嵌套各种类型的对象(规则、运算符、值...)。事实上,您可能想要构建一个抽象语法树(AST)。

示例:(3 and 2无论是什么意思)

可以表示为:

new And(3,2)

在哪里

class And { 
  int left; 
  int right; 

  And(int l, int r) { 
    left = l; right = r;
  } 
  //getters and setters, etc. 
}

现在,为了代表3 and 2 and 5你会(例如)嵌套:

 new And(new And(3, 2), 5);

示例:(3 and 2 -> 1无论这意味着什么......)

您可以表示为:

new Rule(new And(3, 2), new Value(1))

在哪里

class Rule {
    Expression body;
    Expression head;

    Rule(Expression b, Expression h) {
        body = b; head = h;
    }
}

...我很懒惰并假设例如And extends ExpressionValue extends Expression(这可能不是你想要的)是真的。

对于其他谓词、运算符等也是如此。您需要对您的规则语言有一个非常清晰的概念,然后它会相对容易。有很多方法可以组合对象。

现在,尚不清楚您是否需要进行一些解析,或者您是否只想以编程方式组合这些对象。

您可以构建自己的解析器,但有一些库可供它使用,例如JavaCC

于 2014-01-15T23:23:18.210 回答