Для опису правил таблиці аналізу номерів для препроцесора використовується виключно директива ForwardRule від версії H, нагадаємо її формат:
ForwardRule 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 використовуються додаткові символи, а саме:
Для розмітки номера (“красивого друку”) використовуються символи ' ' (пробіл), '_' (підкреслення) та '-' (мінус); так, наприклад, описи:
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