parseDeftemplate в приложении Jess. Не могу предоставить JessTokenStream

Я реализую в своем приложении метонд, использующий класс синтаксического анализатора Jessp, чтобы открыть файл и получить внутри него дефемплаты и дефекты. Проблема заключается в том, что при попытке получить результат в переменную объекта он запрашивает у конструктора JessTokenStream. Я пытался передать JessToken, но потом жалуется на тип, что это должен быть e8. Просматривал документацию Jess, но не нашел объяснения аргументов, только синтаксис конструктора. Кто-нибудь может помочь? Заранее спасибо!!!

1 ответ

Класс JessTokenStream не является общедоступным, поэтому вы не можете вызвать его parseXXX() методы. Они общедоступны по историческим причинам, но на самом деле не используются клиентами. Они действительно должны быть удалены из открытого интерфейса.

Вместо этого используйте форму с двумя аргументами parseExpression(), а затем протестируйте возвращенный объект, чтобы определить его тип. Затем вы можете делать что хотите с возвращенным объектом:

Rete engine = ...
Jesp jesp = ...
Object o = jesp.parseExpression(engine.getGlobalContext(), false);
if (o instanceof Deffacts) {
    Deffacts d = (Deffacts) o;
    for (int i = 0; i<d.getNFacts(); ++i) {
        Fact f = d.getFact(i);
        Deftemplate t = f.getDeftemplate();
        System.out.println("Fact name is " + f.getName();
        System.out.println("Fact name is " + f.getName();
        for (String name: t.getSlotNames())
            System.out.println("Slot " + name + " contains " + f.getSlotValue(name));
    }
}
Другие вопросы по тегам