2

ユーザーがルール エンジンを使用して構築した AST に相当するものがあります。しかし、ルールのリストを表示するときは、各ルールを見栄えのするものに「きれいに印刷」できるようにしたいと考えています**。内部的には、文字列として表されると、s 式のように見えるので、次のようなものを想像してください。

(and (contains "foo" "foobar") (equals 4 (plus 2 2 )))

ルールを読みやすく表示するのに優れたプログラムを誰か教えてもらえますか?

** ローカライズも必要ですが、それは追加の功績のために残しておくことにします。

4

1 に答える 1

1

Attempto Controlled English (ACE) を開発しているAttempto プロジェクトをチェックしてみてください。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 を ACE に変換する DRS verbalizer というツールがあります。上記の DRS の場合、次のようになります。

If "foo" contains "foobar" and it is false that "foobar" contains "foo" then 4 = ( 2 + 2 ).

あなたの場合、ルール表現をDRSに変換する必要があります(これは非常に簡単なはずです)。その後、DRSバーバライザーを直接使用できます。上記のツールは、LGPL ライセンスの下で利用できます

于 2008-11-04T19:14:54.400 に答える