Может ли кто-нибудь указать мне хороший пример красивых правил печати на «английский» - PullRequest
2 голосов
/ 04 ноября 2008

У меня есть эквивалент AST, который пользователь создал с использованием механизма правил. Но при отображении списка правил я хотел бы иметь возможность «красиво печатать» каждое правило во что-то, что выглядит красиво **. Внутренне, когда они представлены в виде строки, они выглядят как s-выражения, поэтому представьте что-то вроде:

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

Может кто-нибудь указать мне на программу, которая хорошо показала правила в удобочитаемом виде?

** Нужно также быть локализуемым, но я думаю, мы оставим это для дополнительного кредита.

1 Ответ

1 голос
/ 04 ноября 2008

Может быть, посмотрите проект Attempto , который разрабатывает Attempto Controlled English (ACE). 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. Указанные инструменты доступны под лицензией LGPL .

...