Семантическая проверка сценариев в «КАСКАД Цифра» осуществляется с помощью следующих вопросов (проверка без гарантии полноты):
- Известны ли переменные?
- Доступны ли переменные? (индивидуальные)
- Известны ли $-параметры?
- Известный ли функции?
- Доступны ли функции? (индивидуальные)
- Количество аргументов.
- Доступно ли объявление переменной уже известной переменной (например, локальная переменная имеет то же имя, что и глобальная переменная)?
- Можно ли получить доступ к функции посредством внешнего вызова функции, написанного в C++?
- Существует ли пустое присваивание после присваиваний «while» или «for» (например, «while (foo) ; bar();«).
- Допускается присваивание в качестве условия в «if», «do», «while» или «for». Например, «if (i = 2) foo();» «if ( (i = 2) ) foo();«.
- Значение в присваивании, например, dpConnect() = 3;
Семантическую проверку можно использовать следующим образом:
WCCOActrl -syntax -proj [projName] [scriptName]
Например, в случае необходимости проверки сценария, называемого «SynCheck.ctl» в проекте «Proj_3.10«, вызов менеджера сценариев осуществляется следующим образом:
WCCOActrl -syntax -proj Proj_3.10 SynCheck.ctl
Все ошибки (PRIO_SEVERE) и все предупреждения (PRIO_WARNING) демонстрируются в средстве просмотра журналов. Результат семантической проверки может выглядеть, например, следующим образом:
WCCOActrl (0), 2010.11.03 10:50:23.454, CTRL, WARNING, 12/ctrl, External declaration of function «dpConnect» shadows definition at a.ctl:10.
WCCOActrl (0), 2010.11.03 10:50:23.454, CTRL, SEVERE, 73, Variable not defined, a.ctl Line: 25, undefined_var
WCCOActrl (0), 2010.11.03 10:50:23.454, CTRL, SEVERE, 76, Invalid argument in function, a.ctl Line: 28, private_var defined in b.ctl is private in this context.
WCCOActrl (0), 2010.11.03 10:50:23.454, CTRL, SEVERE, 17/ctrl, Cannot find dollar parameter $I. Location: a.ctl Line: 32
WCCOActrl (0), 2010.11.03 10:50:23.454, CTRL, SEVERE, 72, Function not defined, a.ctl Line: 35, undefined_func
WCCOActrl (0), 2010.11.03 10:50:23.454, CTRL, SEVERE, 76, Invalid argument in function, a.ctl Line: 38, private_func, private_func defined in b.ctl is private in this context.
WCCOActrl (0), 2010.11.03 10:50:23.454, CTRL, SEVERE, 75, Argument missing in function, a.ctl Line: 41, number_of_arg, a2
WCCOActrl (0), 2010.11.03 10:50:23.454, CTRL, WARNING, 11/ctrl, Declaration of «g» shadows old declaration at «a.ctl Line: 3». Location: a.ctl Line: 44
WCCOActrl (0), 2010.11.03 10:50:23.454, CTRL, WARNING, 13/ctrl, Empty statement found. Location: a.ctl Line: 51
WCCOActrl (0), 2010.11.03 10:50:23.454, CTRL, WARNING, 14/ctrl, Assignment used in a condition. Location: a.ctl Line: 55
WCCOActrl (0), 2010.11.03 10:50:23.454, CTRL, SEVERE, 78, Assignment to this expression impossible, a.ctl Line: 58
Ограничения:
- Менеджер сценариев не может осуществлять проверку сценариев, выполняющихся в пользовательском интерфейсе.
- Ключевой слово «#uses» следует использовать для объявления всех необходимых библиотек.
- Функции «addGlobal» и «removeGlobal» не оцениваются. Если глобальные переменные не объявлены как «глобальные», но во время выполнения была добавлена переменная с помощью функции «addGlobal» — будет отображена ошибка.
- Графические объекты не анализируются.
- Ошибка отображается, если библиотека Control пытается получить доступ к переменным, объявленным в панели.