Разбор синтаксиса, похожего на SQL, шаблон проектирования

Я пытаюсь имитировать синтаксис sql, чтобы создать простой sql-подобный интерфейс для значения ключа -место хранения. Значения, по сути, являются POJO

. Примером может быть

select A.B.C from OBJ_POOL where A.B.X = 45 AND A.B.Y > '88' AND A.B.Z != 'abc';

OBJ _POOL — это просто список POJO одного и того же класса. В этом примере A будет базовым классом.

Class A
    Class B
        String C
        Integer X
        String Y
        String Z

Теперь A.B.C эквивалентен A.getB ().getC()

Я использую Antlr для анализа приведенного выше оператора для получения AST, а затем hopingдля использования Apache BeanUtils для получения/установки имен полей.

Я написал грамматику, которая строит AST AST for the above statmentТеперь я столкнулся с двумя проблемами

  1. Как должен быть реализован посетитель для предложения where? A.B.X = 45 подразумевает, что все объекты, имеющие поле X как 45, как должна происходить фильтрация, есть ли хороший способ сделать это?
  2. Есть ли способ обойти сгенерированный AST, не загромождая код посетителя настраиваемой логикой? (доступ к хранилищу, методы получения/установки свойств и т. д.)

Вторая проблема вызывает большее беспокойство, поскольку может быть много вещей, которые заявление может сделать.

Вкратце, любые предложения/ссылки/конструкции -шаблонов для правильного анализа небольшого подмножества оператора sql select будут очень признательны

Спасибо

14
задан jack_carver 30 April 2012 в 07:26
поделиться