Дополнительные возможности управления активностью продукций

СМ. РИС.280

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     

 

Hosted by uCoz