использование ASTVisitor для пользовательских запросов - PullRequest
0 голосов
/ 23 марта 2012

У меня есть задание, и я даже не знаю, как начать. Мне нужно реализовать синтаксический анализатор AST для таких запросов:

((книга, где publish_date> 2000) .author)

В основном методе это должно выглядеть так:

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

Это единственный пример, как это назвать. Любые советы, как начать? Некоторые примеры кода были бы великолепны.

1 Ответ

0 голосов
/ 23 марта 2012

Фабрика для всех этих классов будет хорошо:

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