Дополнительные возможности управления активностью
продукций
1)Управление на
уровне секций.
<секция>:: = section <имя>[<описатель>][<правила секции>]
{<множество продукций>}+
Правила секции имеют вид:
<правила секции>:: = <условие> -> <действие>
<условие>:: = <условный элемент>│< условный элемент > & < условный элемент >…
В качестве условных элементов кроме обычных образцов (факта, сравнение, строки) можно использовать текущее состояние секций (какие продукции активны, какие нет), и предысторию процесса (какие продукции уже сработали успешно).
< условный элемент >:: = < ifactive_элемент > │ - активность
< условный элемент >:: = < ifused_элемент >│ - использование
< условный элемент >:: = < ifpat_элемент > - произведение
< действие >:: = exclude (< имя продукции >)│ include (< имя продукции >)
Правила секции может быть несколько, срабатывают они в порядке расположения.
Пример:
Section 9
ifused
r12 &
if pat
(< e1 > 15 )
-> include r13
2)Управление
на уровне одной продукции.
< продукция >:: = rule < имя > [< правила разрешения конфликтов >] < левая часть >
< правая часть >
Правила разрешения используется тогда, когда в конфликтном множестве имеются несколько продукций. В какой - то степени компенсирует отсечение системы приоритетов, но в некоторых случаях обеспечит большие возможности, чем система приоритетов, давая возможность установить индивидуальные взаимные приоритеты.
<правила разрешения>:: = <условие> -> <действие>
<условный элемент>:: = <ifused_элемент>│<ifpat_элемент>│<ifwith_элемент> - наличие в конфликтном множестве определенных продукций.
<действие>:: = remove (<имя продукции>)│ - удалить из конфликтного множества
set (<имя продукции>) - оставить
Пример:
rule
r5
ifwith < e2 &
ifused r5 &
ifpath (*:) -> set r8