我已经获得了用户使用规则引擎构建的AST的等价物。但是当显示规则列表时,我希望能够将每条规则“漂亮地”打印成看起来不错的东西**。在内部表示为字符串时,它们看起来像s表达式,所以想象一下:
(and (contains "foo" "foobar") (equals 4 (plus 2 2 )))
有人能指出一个能够以可读方式很好地显示规则的程序吗?
**也需要本地化,但我想我们会留下额外的信用。
答案 0 :(得分:1)
也许查看正在开发Attempto Controlled English(ACE)的Attempto project。 ACE允许您在英语子集中编写规则。例如:
If "foo" contains "foobar" and "foobar" does not contain "foo" then 4 = 2 + 2.
ACE解析器将此类规则转换为称为话语表示结构(DRS)的逻辑形式。对于上面的示例,它看起来像这样:
[]
[A]
predicate(A, contain, string(foo), string(foobar))-1
NOT
[B]
predicate(B, contain, string(foobar), string(foo))-1
=>
[]
formula(int(4), =, expr(+, int(2), int(2)))-1
有一种名为DRS verbalizer的工具可将DRS转换为ACE。对于上述DRS,您将得到:
If "foo" contains "foobar" and it is false that "foobar" contains "foo" then 4 = ( 2 + 2 ).
在您的情况下,您必须将规则表示转换为DRS(应该非常直接),然后您可以直接使用DRS语言分析器。提到的工具是available under the LGPL license。