Регистрация | Вход
$RULE MakeNewRule Запомни новое правило $% body of my new rule $% Конец$RULE-BODY $REM поставим новый разделитель. Когда правило отработает $REM в текст будет вставлено описание нового правила $REM MiLK, разбирая текст дальше, найдет его, прочтет $ASSOCIATE sys.parameters delimiter # $% body of my new rule $% #REM вернем разделитель обратно, т.к. дальше может быть код с "классическим" разделителем #ASSOCIATE sys.parameters delimiter $$RULE-END
Запомни новое правило#RULE xxx Пока, #%кто-то#%#RULE-BODY Прощай, моя ненаглядная и трепетно любимая #%кто-то#%!#RULE-ENDКонецInput> Пока, кружка чаяMiLK> Прощай, моя ненаглядная и трепетно любимая кружка чая!
$ASSOCIATION-CREATE vrs$ASSOCIATE vrscount0$RULE t1 $%var1$% $%var1$% $%other$%$RULE-BODY $ASSOCIATE vrs count $NUMBER + ${vrs$count$} 1 ?cntrep? $%var1$% $%var1$% $%other$%Total Count of $%var1$% : ${vrs$count$}$RULE-END$RULE t2 ?cntrep? $%var1$% $%var1$% $%other$%$RULE-BODY $ASSOCIATE vrs count $NUMBER + ${vrs$count$} 1 ?cntrep? $%var1$% $%other$%$RULE-END
$RULE скобки ? ($%rest$%$RULE-VERSION-VARIABLE Result $NUMBER + 1 ? $%rest$%$RULE-VERSION ? $%_$%$RULE-VERSION-VARIABLE Result 0$RULE-BODY $%result$%$RULE-ENDInput> ? ((((sin))))MiLK> 4
$REM подсчет уровня вложенности скобок$REM будем искать и удалять самый внутренний текст, окруженный скобками$RULE ??скобок?? ??скобок?? $%left$%($%center$%)$%right$%$RULE-VERSION-VARIABLE result $REM Если центр содержит скобки - неуспех сопоставлнния. $CHECK 1 $STRING CONTAIN ) $%center$% $STRING CONTAIN ( $%center$% $CHECK-THEN $FAILURE $CHECK-END $NUMBER + 1 ??скобок?? $%left$%$%right$%$RULE-VERSION пустые скобки преобразуем к "полным" (для превой версии) ??скобок?? $%left$%()$%right$%$RULE-VERSION-VARIABLE result ??скобок?? $%left$%(0)$%right$%$RULE-VERSION "голую" левую скобку "прикроем" ??скобок?? ($%right$%$RULE-VERSION-VARIABLE result ??скобок?? 0($%right$%$RULE-VERSION "голую" правую скобку "прикроем" ??скобок?? $%left$%)$RULE-VERSION-VARIABLE result ??скобок?? $%left$%)0$RULE-VERSION ??скобок?? $%text$%$RULE-VERSION-VARIABLE result 0$RULE-BODY $%result$%$RULE-ENDInput> ??скобок?? 2+(2*3+(5/2+(-1+sin(2*pi))))MiLK> 4
$RULE ?повторов в начале? ?повторов в начале? $%x$% $%x$% $%others$%$RULE-VERSION-VARIABLE result $NUMBER + 1 ?повторов в начале? $%x$% $%others$%$RULE-VERSION ?повторов в начале? $%x$% $%x$%$RULE-VERSION-VARIABLE result 2$RULE-VERSION ?повторов в начале? $%others$%$RULE-VERSION-VARIABLE result 1$RULE-BODY $%result$%$RULE-ENDInput> ?повторов в начале? 15 15 15 остальноеMiLK> 3Input> ?повторов в начале? hello hello good byeMiLK> 2
$REM будем здесь хранить то, что надо найти$ASSOCIATION-CREATE what$REM вернет 1, если строка содержит значение элемента need ассоциации what$RULE ?служ.правило для "My own contain"? ?служ.правило для "My own contain"? $%_$%$%bingo$%$%_$%$RULE-VERSION ?служ.правило для "My own contain"? $%_$%$%bingo$%$RULE-VERSION ?служ.правило для "My own contain"? $%bingo$%$%_$%$RULE-VERSION ?служ.правило для "My own contain"? $%bingo$%$RULE-BODY $CHECK $%bingo$% ${what$need$} $CHECK-THEN 1 $CHECK-ELSE $FAILURE $CHECK-END$RULE-END$REM вернет 0, $RULE ?служ.правило #2 для "My own contain"? ?служ.правило для "My own contain"? $%_$%$RULE-BODY 0$RULE-END$REM вызывающее правило$RULE My own contain строка содержит $%что$% $%где$%$RULE-BODY $ASSOCIATE what need $%что$% ?служ.правило для "My own contain"? $%где$%$RULE-ENDInput>строка содержит XYZ abcdefghMiLK> 0Input>строка содержит XYZ abcdXYZefghMiLK> 1