Есть ли хороший термин, переписывающий библиотеку для Java? - PullRequest
3 голосов
/ 29 апреля 2011

Я работаю над Java-приложением, которое рассуждает на основе базовых терминов языка, тривиально реализованных в виде композитов (все они создаются внутренне, а не анализируются из текста). Теперь мне нужно применить набор правил переписывания для термина «язык», и этот вопрос становится действительно раздражающим, когда я выполняю его вручную. После некоторых исследований я обнаружил, что Tom и, возможно, Stratego / XT могут стать альтернативой для добавления возможностей переписывания терминов в Java. У кого-нибудь есть опыт, чтобы подсказать мне, в чем преимущества и недостатки обоих? Кто-нибудь знает о какой-либо альтернативе? Учитывая размер программного обеспечения, возможность переписывать термины, реализованные в виде структур данных POJO, является обязательным условием (я близок к крайнему сроку и не хочу заменять текущее представление терминов другим, хотя, скорее всего, это произойдет в будущем).

1 Ответ

1 голос
/ 03 июня 2011

Также существует термин: http://redmine.gradsoft.ua/projects/show/termware

Не уверен, что это именно то, что вам нужно, но он может обрабатывать любой java-объект в правиле, т.е.

domain(examples,
  system(Invoicing,default,
         ruleset(
           # import general operations.
           import(general),

           # handle new invoice and set one to paid if possible.
           @class("ua.gradsoft.termwaredemos.invoicing.Invoice", $invoice)
                        [ ! $invoice.isPayed()
                           &&
                            $invoice.getCustomer().getAccountBalance() - $invoice.getAmount() + $invoice.getCustomer().getCreditLimit() > 0
                        ]
                          -> true
                             [ $invoice.getCustomer().decrementAccount($invoice.getAmount())
                               &&
                               $invoice.setPayed(true) ],

           # set credit limit in depend from summary payments.
           @class("ua.gradsoft.termwaredemos.invoicing.Customer", $customer)
                        [ $customer.getAccountBalance() > 0 && $customer.getSummaryPayments() > 2000 ] -> true [ $customer.setCreditLimit(500) ]

         ),
         FirstTop)
);

Также вы можете = посмотреть на сторону Джесс. http://www.jessrules.com/

...