Jess应用程序中的parseDeftemplate。无法提供JessTokenStream

时间:2014-07-06 16:54:30

标签: parsing jess

我正在我的应用程序中实现一个使用Jessp解析器类的方法,以便打开一个文件并获取其中的deftemplates和deffacts。问题是当尝试将结果获取到对象变量时,它会在构造函数上询问JessTokenStream。我试图传递一个JessToken,但后来它抱怨这个类型,它应该是e8。通过Jess文档搜索但没有找到参数的解释,只有构造函数的语法。 有人可以帮忙吗? 在此先感谢!!!

1 个答案:

答案 0 :(得分:0)

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