2012-03-23 6 views
0

私はやるべきことがありますし、始める方法もわかりません。私はそのようなクエリのためにASTパーサーを実装する必要があります。ASTVisitorをカスタムクエリに使用する

((本公開日> 2000).author)

mainメソッドでは、それは次のようになります。

Expression ex = new DotExpression(
    new WhereExpression(
     new NameExpression("book"), 
     new NameExpression("publish_date") > 2000 
    ), 
    new NameExpression("author")); 
ex.accept(new ASTVisitor()); 

だとそれを呼び出す方法の例だけです。どのように開始するためのアドバイス?いくつかのコード例は素晴らしいでしょう。

+0

まあ、それはあなたの表現の各部分は、このためのクラスである必要があることをあなたの例から明らかです働くですから、Expression、WhereExpressression、NameExpressionのクラスを作成することをお勧めします。そのクラスの属性は、Expressionが取ることができる値になります。 –

答えて

0

すべてのこれらのクラスは大丈夫だと思うのための工場:

public abstract class Expressions { 
    public static DotExpression dot(NameExpression lhs, Expression rhs); 
    public static BooleanExpression where(Expression lhs, Expression rhs); 
    public static NameExpression name(String name); 
    public static BooleanExpression gt(Expression lhs, Expression rhs); 
} 

使用

static import Expressions.*; 

... where(gt(name("publish_date"), value(2000)));