ЄС-11

Цифрова комутаційна система

Науково-виробничий центр
"Автоматизовані мікропроцесорні системи"
ЄДРПОУ: 13807402 тел: +380-32-237-21-36

Користувальницькькі налаштування

Налаштування сайту


es11soft:preprocessing:forwardrule-plus

Правила аналізу номерів для препроцесора

ForwardRule для препроцесора

Для опису правил таблиці аналізу номерів для препроцесора використовується виключно директива ForwardRule від версії H, нагадаємо її формат:

 ForwardRule   Pnt,Pat,Acs,Mod,Drc_Hnd_Nxt,Dig,Skp

Параметри, стисло:

  • Pnt - точка аналізу номера; ця назва вказується в описах каналів;
  • Pat - шаблон аналізу номера; шаблон слід брати в лапки;
  • Acs - права дозволу виходу у виконавчу гілку;
  • Mod - режим виходу у виконавчій гілці;
  • Drc_Hnd_Nxt - напрямок, сотня, наступна гілка аналізу, чи метод заміни номера;
  • Dig - кількість цифр номера - довжина номера;
  • Skp - кількість цифр, які відсікаються на таблиці аналізу;

Директиви ForwardRule можуть вказуватись в довільному порядку, та в довільному місці файлу опису.

Приклади директиви від версії H:

 ForwardRule AT  , "00xxxxxxxx" , DrOverSeas, #,         AMTSN, -1, 0
 ForwardRule AT  , "2130"       , DrTownOnly, #,          Bad2,  5, 0
 ForwardRule AT  , "39"         , DrTownOnly, =,           Mik,  5, 0
 ForwardRule AT  , "240077"     , DrTownOnly, -,          pram,  6, 0

Зауважмо, в версії H, в шаблоні аналізу Pat можна використовувати тільки символи цифр (0-9) та x (будь-яка цифра). Параметри Dig та Skp опускати не можна.

Для препроцесорів (режим H+Pre) для розширення функцій аналізу в шаблонi Pat використовуються додаткові символи, а саме:

  • символ ' ' (пробіл) - ігнорується;
  • символ '_' (підкреслення) - ігнорується;
  • символ '-' (мінус) - ігнорується, але тільки за межами діапазону;
  • символ '.' (крапка) - ігнорується, використовується для визначення довжини номера по замовчуванню; можна використовувати тільки в кінці номера;
  • символ 'x' (літера x) - означає будь-яку цифру в цій позиції номера;
  • символ '*' (зірочка) в правилі - аналогічно символу “x” - означає будь-яку цифру номера;
  • символи '(' та ')' - правило діапазону;
  • елемент [Par,Val] - встановлення параметру виклику Par в значення Val;
  • елемент {Par,Val} - перевірка параметру виклику Par на значення Val; якщо Val відсутнє, то допускається будь-яке значення параметра;
  • елемент <Par,Val> - перевірка системного параметру Par на значення Val; якщо Val відсутнє, то допускається будь-яке значення параметра;
  • символ '!' (знак оклику) перед правилом - це правило виключення;

Розмітка номера та довжина номера

Для розмітки номера (“красивого друку”) використовуються символи ' ' (пробіл), '_' (підкреслення) та '-' (мінус); так, наприклад, описи:

 ForwardRule AT  , "240077"   , DrTownOnly, -, pram,  6, 0
 ForwardRule AT  , "240-077"  , DrTownOnly, -, pram,  6, 0
 ForwardRule AT  , "24 00 77" , DrTownOnly, -, pram,  6, 0

- ідентичні.

В директиві препроцесора ForwardRule можна не вказувати параметр Skp (кількість цифр, які відсікаються на таблиці аналізу) - по замовчуванню приймається значення 0. Також, можна не вказувати і довжину номера (Dig) - по замовчуванню буде підставлене кількість цифр (та символів '*') в параметрі Pat; так директива:

 ForwardRule AT  , "24-00-77" , DrTownOnly, -, pram ;; 6 по замовчуванню.

ідентична попереднім. Символ '.' (крапка) в номері нічого не значить та використовується для визначення довжини номера, так, дві директиви нижче - ідентичні:

 ForwardRule AT  , "24-03-" , DrTownOnly, -, pram, 6,0
 ForwardRule AT  , "2403.." , DrTownOnly, -, pram ;; 6 по довжині

Діапазони та виключення

Правило діапазону визначає початок та кінець (в круглих дужках) діапазону номерів і описується так:

  ForwardRule  A, "510( 0- 5)",    DrTownOnly, #,   BadA,  5,0
  ForwardRule  A, "51 (06-29)",    DrTownOnly, #,   Bad1,  5,0
  ForwardRule  A, "(51300-51534)", DrTownOnly, #,   Bad2,  5,0

Перший приклад: враховуючи довжину номера 5 цифр в напрямок BadA вийдуть номери в діапазоні 5100x-5105x. Другий приклад: в напрямок Bad1 вийдуть номера в діапазоні 5106x-5129x. Третій приклад: в напрямок Bad2 вийдуть номера в діапазоні 51300-51534. Початок та кінець повинні мати однакову кількість символів.

Правило виключення (відмічено символом “!” перед подвійними лапками) визначає конкретний номер (або неявну групу номерів), який треба обробляти певним чином, приклад:

 ForwardRule  A, !"52404",      DrTownOnly, -,        Ab524,  5,0

Всупереч іншим правилам аналізу номера, конкретний номер 52404 буде направлено в сотню Ab524. Правила діапазону та виключення “добре грають в парі”, приклад:

 ForwardRule  A,  "010050",       DrOverTown, #,  AMTS, 10,0
 ForwardRule  A, !"010050-1111",  DrOverTown, #,  INTR, 10,0
 ForwardRule  A, !"010050-999",   DrOverTown, #,  INTR, 10,0

Всі номери в неявному діапазоні 0100500000-0100509999 попадуть в напрямок AMTS; з цих номерів буде виключено номери 0100501111 та 0100509990-0100509999 - вони попадуть в напрямок INTR.

Діапазони та виключення надзвичайно ефективний (та зрозумійлий) засіб опису правил аналізу номерів - дві-три такі директиви розгортаються в десять-п'ятнадціть звичайних директив ForwardRule. Приклад - чотири рядки опису:

 ForwardRule nAN, "416(021-655)", DrTownOnly, #,Bad2
 ForwardRule nAN, !"416333", DrTownOnly, -,Pabn;;
 ForwardRule nAN, !"416336", DrTownOnly, -,Pabn;;
 ForwardRule nAN, !"416347", DrTownOnly, -,Pabn;;

препроцесором разгортаються в таку послідовність на пів-сторінки:

;;    Для початкової точки  nAN  визначено   37  правил аналізу номера
ForwardRule nAN,"416021",DrTownOnly,#, Bad2,6,0
ForwardRule nAN,"416022",DrTownOnly,#, Bad2,6,0
ForwardRule nAN,"416023",DrTownOnly,#, Bad2,6,0
ForwardRule nAN,"416024",DrTownOnly,#, Bad2,6,0
ForwardRule nAN,"416025",DrTownOnly,#, Bad2,6,0
ForwardRule nAN,"416026",DrTownOnly,#, Bad2,6,0
ForwardRule nAN,"416027",DrTownOnly,#, Bad2,6,0
ForwardRule nAN,"416028",DrTownOnly,#, Bad2,6,0
ForwardRule nAN,"416029",DrTownOnly,#, Bad2,6,0
ForwardRule nAN,"41603", DrTownOnly,#, Bad2,6,0
ForwardRule nAN,"41604", DrTownOnly,#, Bad2,6,0
ForwardRule nAN,"41605", DrTownOnly,#, Bad2,6,0
ForwardRule nAN,"41606", DrTownOnly,#, Bad2,6,0
ForwardRule nAN,"41607", DrTownOnly,#, Bad2,6,0
ForwardRule nAN,"41608", DrTownOnly,#, Bad2,6,0
ForwardRule nAN,"41609", DrTownOnly,#, Bad2,6,0
ForwardRule nAN,"4161",  DrTownOnly,#, Bad2,6,0
ForwardRule nAN,"4162",  DrTownOnly,#, Bad2,6,0
ForwardRule nAN,"416333",DrTownOnly,-, Pabn,6,0
ForwardRule nAN,"416336",DrTownOnly,-, Pabn,6,0
ForwardRule nAN,"41633x",DrTownOnly,#, Bad2,6,0
ForwardRule nAN,"416347",DrTownOnly,-, Pabn,6,0
ForwardRule nAN,"41634x",DrTownOnly,#, Bad2,6,0
ForwardRule nAN,"4163x", DrTownOnly,#, Bad2,6,0
ForwardRule nAN,"4164",  DrTownOnly,#, Bad2,6,0
ForwardRule nAN,"4165",  DrTownOnly,#, Bad2,6,0
ForwardRule nAN,"41660", DrTownOnly,#, Bad2,6,0
ForwardRule nAN,"41661", DrTownOnly,#, Bad2,6,0
ForwardRule nAN,"41662", DrTownOnly,#, Bad2,6,0
ForwardRule nAN,"41663", DrTownOnly,#, Bad2,6,0
ForwardRule nAN,"41664", DrTownOnly,#, Bad2,6,0
ForwardRule nAN,"416650",DrTownOnly,#, Bad2,6,0
ForwardRule nAN,"416651",DrTownOnly,#, Bad2,6,0
ForwardRule nAN,"416652",DrTownOnly,#, Bad2,6,0
ForwardRule nAN,"416653",DrTownOnly,#, Bad2,6,0
ForwardRule nAN,"416654",DrTownOnly,#, Bad2,6,0
ForwardRule nAN,"416655",DrTownOnly,#, Bad2,6,0

Встановлення та перевірка параметрів виклику

Повний опис використання параметрів виклику в правилах аналізу номера приведено в Модернізована директива ForwardRule. Додатково в значенні параметра можна використовувати один символ в одинарних лапках:

ForwardRule nAN, "45(00-14){KAT='C'}..", DrTownOnly, =,Leshin_C 
ForwardRule nAN, "45(00-14){KAT='E'}..", DrTownOnly, =,Leshin_E

в обох випадках довжина номеру шість цифр.

Переходи по вузлам аналізу номера

В звичайній директиві ForwardRule - можна безпосередньо вказувати наступний вузол аналізу номера (це параметр Drc_Hnd_Nxt), приклад:

 ForwardRule Au,"3",, , An

З такого типу переходами треба бути надзвичайно обережними - вони джерело небезпечних помилок! Наприклад, три директиви (фрагмент великої таблиці):

 ForwardRule An,"3",  DrTownOnly, #,  Town,  6,0
 ForwardRule An,"33", DrTownOnly, #, Vodne,  6,0
 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   
 ForwardRule Au,"3",, , An

Перші дві директиви (з коренем An) визначають що в напрямок Town ми попадемо з початком номера “3…..” (шість цифр), а в напрямок Vodne - з початком номера “33….” (шість цифр). Третя директива (разом з першима двома), в свою чергу, визначає що в напрямок Town ми попадемо з початком номера “33….” (також шість цифр), а в напрямок Vodne - з початком номера “333…” - що, в принципі, не теж саме! Помилка в тому, що при переході на дерево An змінюється рівень вузла аналізу номера - з рівня 1 на рівень 0.

В препроцесорній директиві ForwardRule є можливість конкретизувати вузол переходу; останню директиву слід було написати таким чином:

 ForwardRule Au,"3",, , An,"3"

тоб-то перехід в дерево An з вже прийнятою цифрою “3”.

Обмеження

Визначаються версією ядра, в яке потрібно транслювати ці директиви; так, в ядрі G - взагалі не підтримується робота з параметрами.

Для ядра H не підтримується робота з системними параметрами, та на одному рівні аналізу не можна одночасно перевіряти цифри та параметри (змінювати тип вузла); так, розглянемо дві директиви:

ForwardRule An,"80"         , DrOverTown,=, Drc0,11,0
ForwardRule An,"8{CPC,226}1", DrOverTown,=, Drc0,11,0

помилкою буде перевірка цифри 0 та параметру CPC на одному рівні. Приклад правильного опису:

ForwardRule An,"80",          DrOverTown,=, Drc0,11,0
ForwardRule An,"81{CPC,226}", DrOverTown,=, Drc0,11,0
es11soft/preprocessing/forwardrule-plus.txt · В останнє змінено: 2016/09/16 11:44 (зовнішнє редагування)