|
@@ -484,6 +484,66 @@ SEQ сам может быть элементом контейнера SWITCH.
|
|
|
|
|
|
### ACTION
|
|
|
|
|
|
+Тег `ACTION` определяет действие, которое необходимо выполнить. Типичное
|
|
|
+использование тега - внутри команды `COMMAND`. При вводе оператором
|
|
|
+соответствующей команды, действия, определенные в `ACTION` будут выполнены.
|
|
|
+
|
|
|
+Действия могут выполняться не только командой. Далее приведен список тегов,
|
|
|
+внутри которых может встречаться `ACTION`:
|
|
|
+
|
|
|
+* `ENTRY` - для чего будет использован `ACTION`, определяется параметрами `ENTRY`.
|
|
|
+* `COMMAND` - выполняется действие, определенное в `ACTION`, при вводе оператором
|
|
|
+соответствующей команды.
|
|
|
+* `PARAM` - тоже, что и для `COMMAND`.
|
|
|
+* `PTYPE` - `ACTION` определяет действия для проверки значения введенного
|
|
|
+оператором параметра, имеющего соответствующий тип.
|
|
|
+
|
|
|
+Внутри перечисленных элементов может быть одновременно несколько элементов
|
|
|
+`ACTION`. Назовем это блоком элементов `ACTION`. Действия выполняются
|
|
|
+последовательно, одно за другим, если иное не определено атрибутом `exec_on`.
|
|
|
+
|
|
|
+Внутри одной команды может быть определено несколько блоков действий. Это
|
|
|
+возможно, если команда имеет ветвление параметров или опциональные параметры.
|
|
|
+Блоком считаются действия, определенные внутри одного элемента. Действия,
|
|
|
+определенные в разных элементах, включая вложенные, пренадлежат разным блокам.
|
|
|
+Всегда выполняется только один блок действий.
|
|
|
+
|
|
|
+```
|
|
|
+<COMMAND name="cmd1">
|
|
|
+ <ACTION sym="sym1"\>
|
|
|
+ <SWITCH min="0">
|
|
|
+ <COMMAND name="opt1">
|
|
|
+ <ACTION sym="sym2"\>
|
|
|
+ </COMMAND>
|
|
|
+ <COMMAND name="opt2"\>
|
|
|
+ <PARAM name="opt3" ptype="/STRING">
|
|
|
+ <ACTION sym="sym3"\>
|
|
|
+ </PARAM>
|
|
|
+ </SWITCH>
|
|
|
+</COMMAND>
|
|
|
+```
|
|
|
+
|
|
|
+В примере объявлена команда "cmd1", имеющая три альтернативных (указан может быть
|
|
|
+только один из трех) опциональных параметра. Поиск действий для выполнения идет
|
|
|
+с конца к началу при разборе введенной командной строки.
|
|
|
+
|
|
|
+Так если оператор ввел
|
|
|
+команду `cmd1`, то механизм разбора распознает команду с именем "cmd1" и будет
|
|
|
+искать `ACTION` непосредственно в этом элементе. Будет найден `ACTION` с символом
|
|
|
+"sym1".
|
|
|
+
|
|
|
+Если оператор ввел команду `cmd1 opt1`, то строка "opt1" будет распознана,
|
|
|
+как параметр (он же подкоманда) с именем "opt1". Поиск идет с конца, поэтому
|
|
|
+сначала будет найден `ACTION` с символом "sym2". Как только блок действий найден,
|
|
|
+больше поиск действий производиться не будет и "sym1" найден не будет.
|
|
|
+
|
|
|
+Если оператор ввел команду `cmd1 opt2`, то будет найдено действие с символом
|
|
|
+"sym1", так как элемент "opt2" не имеет собственных вложенных действий и поиск
|
|
|
+уходит наверх к родительским элементам.
|
|
|
+
|
|
|
+Если оператор ввел команду `cmd1 arbitrary_string`, то будет найдено действие с
|
|
|
+символом "sym3".
|
|
|
+
|
|
|
|
|
|
### ENTRY
|
|
|
|