Семантической контроль сценариев

Семантическая проверка сценариев в «КАСКАД Цифра» осуществляется с помощью следующих вопросов (проверка без гарантии полноты):

  • Известны ли переменные?
  • Доступны ли переменные? (индивидуальные)
  • Известны ли $-параметры?
  • Известный ли функции?
  • Доступны ли функции? (индивидуальные)
  • Количество аргументов.
  • Доступно ли объявление переменной уже известной переменной (например, локальная переменная имеет то же имя, что и глобальная переменная)?
  • Можно ли получить доступ к функции посредством внешнего вызова функции, написанного в 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 пытается получить доступ к переменным, объявленным в панели.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *