2012-03-23 80 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,WhereExepression,NameExpression创建一个类。然后,该类的属性将是表达式可以采用的值。 – 2012-03-23 17:49:39

回答

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)));